如何通过SQL枚举用户列表
本文关键字:用户 列表 枚举 SQL 何通过 | 更新日期: 2023-09-27 18:13:49
我正在创建一个简单的工具,用于为我们的产品管理数据库用户,具有基本的CRUD操作。该工具是在VS2013中构建的,使用Firebird ADO v5.5.5.0连接到Firebird 2.5数据库。
是否有一种使用SQL枚举用户列表的方法?
我需要显示用户列表,然后在该列表上执行CRUD操作。运行命令,如
SELECT RDB$USER
FROM RDB$USER_PRIVILEGES
GROUP BY 1
在这个链接中显示的是不够的,因为它要求在这个表中存在用户权限。
任何帮助都会很感激。谢谢。
在Firebird 2.5或更早的版本中,访问所有用户列表的唯一方法是通过服务API。Firebird ADO.net提供程序对此有一个实用程序类:FirebirdSql.Data.Services.FbSecurity
:
var fbSecurity = new FbSecurity(ConnectionString);
var users = fbSecurity.DisplayUsers();
foreach (var user in users)
{
Console.WriteLine(user.UserName);
}
您还可以使用这个类来添加、删除或修改用户。
请注意,对于大多数用户,这仅限于该用户,只有SYSDBA和角色为RDB$ADMIN的用户才能看到所有用户。
请注意,Firebird 3弃用了用于用户管理的服务API,从Firebird 3开始,您应该使用SQL用户管理语句。
Firebird 3还添加了虚拟表SEC$USERS
,其中包含当前用户可以管理的用户。对于大多数用户来说,这通常只是那个用户,只有SYSDBA和角色为RDB$ADMIN的用户才能看到所有用户。
请注意,Firebird 3可以有多个身份验证插件,这意味着用户名可以出现多次(即每个插件最多一次)。