【问题标题】:How to enumerate list of users via SQL?如何通过 SQL 枚举用户列表?
【发布时间】:2016-10-20 02:36:13
【问题描述】:

我正在为我们的产品创建一个简单的工具来管理数据库用户,它具有基本的 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 所示是不够的,因为它要求此表中存在用户权限。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c# firebird firebird2.5


    【解决方案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 用户管理语句。见SQL Features for Managing Access

    Firebird 3 还添加了virtual table SEC$USERS 以及允许当前用户管理的用户。对于大多数用户来说,这通常是只有那个用户,只有 SYSDBA 和具有 RDB$ADMIN 角色的用户可以查看所有用户。

    请注意,Firebird 3 可以有多个身份验证插件,这意味着用户名可以出现多次(即每个插件最多一次)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多