如何通过SQL枚举用户列表?

时间:2016-10-20 02:36:13

标签: c# firebird firebird2.5

我正在创建一个简单的工具来管理我们产品的数据库用户,并使用基本的CRUD操作。该工具使用针对Firebird 2.5数据库的Firebird ADO v5.5.5.0连接在VS2013中构建。

有没有办法使用SQL枚举用户列表?

我需要显示用户列表,然后在该列表上执行CRUD操作。

运行

等命令
        BigDecimal d = new BigDecimal("10");
        if(d.compareTo(new BigDecimal("0"))>0)
            System.out.println("true");
        //this evaluates to true
this link here中显示的

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

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

1 个答案:

答案 0 :(得分:2)

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