我正在创建一个简单的工具,用于管理我们产品的数据库用户,并具有基本的 CRUD 操作。该工具是在 VS2013 中构建的,使用 Firebird ADO v5.5.5.0 连接 Firebird 2.5 数据库。
有没有办法使用SQL来枚举用户列表?
我需要显示用户列表,然后对该列表执行 CRUD 操作。
运行命令,例如
SELECT RDB$USER
FROM RDB$USER_PRIVILEGES
GROUP BY 1
如this link here所示还不够,因为它要求此表中存在用户权限。
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
在 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 用户管理语句。请参阅SQL Features for Managing Access .
Firebird 3 还添加了 virtual table SEC$USERS
与当前用户允许管理的用户。对于大多数用户来说,这通常只是该用户,只有 SYSDBA 和具有 RDB$ADMIN 角色的用户才被允许查看所有用户。
请注意,Firebird 3 可以有多个身份验证插件,这意味着用户名可以出现多次(即每个插件最多出现一次)。
关于c# - 如何通过 SQL 枚举用户列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144495/