如何通过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
在这个链接中显示的

是不够的,因为它要求在这个表中存在用户权限。

任何帮助都会很感激。谢谢。

如何通过SQL枚举用户列表

在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可以有多个身份验证插件,这意味着用户名可以出现多次(即每个插件最多一次)。