【发布时间】:2013-07-13 10:41:18
【问题描述】:
我尝试过,但始终未能在 firebird 数据库中显示和设置用户权限。我用过;
GSEC> 显示
但它只显示用户名。我想查看所有权利,我想设置它们。我们可以做这样的选择和管理吗?
问候,
【问题讨论】:
我尝试过,但始终未能在 firebird 数据库中显示和设置用户权限。我用过;
GSEC> 显示
但它只显示用户名。我想查看所有权利,我想设置它们。我们可以做这样的选择和管理吗?
问候,
【问题讨论】:
Firebird gsec 实用程序仅管理全局安全数据库中的用户及其密码(在 Firebird 2.0 及更高版本中为 security2.fdb)。用户的权限是按数据库管理的(用户SYSDBA 除外),不能使用gsec 进行管理。
通过定义角色(可选)、为角色和/或用户分配权限以及为特定数据库中的用户分配角色来控制每个数据库的用户权限。分配给角色的权限仅在附加时指定角色时应用,否则仅应用用户权限。
使用GRANT 和REVOKE 完成分配权限。有关详细信息,请查看 Firebird 3 release notes 和/或 Interbase 6.0 Operations Guide 第 5 章数据库安全、Interbase 6.0 语言参考和 Interbase 6.0 数据定义指南中记录的 Firebird 2.5 Language Reference chapter Security 和 Firebird 3 的更改(均可从同一位置下载)作为操作指南)和Firebird Language Reference Update 中记录的更改。
要显示当前在数据库中授予的权限,您可以使用isql 工具,命令show grants。您将需要连接到您想要获取信息的特定数据库。对于其他工具或普通客户端连接,您需要自己查询系统表(特别是RDB$USER_PRIVILEGES),或者使用工具的功能(例如Flamerobin也可以显示权限)。
如果没有授予权限(这意味着只有SYSDBA 和数据库所有者拥有权限),show grants; 将输出:
SQL> show grants;
There is no privilege granted in this database
例如,假设我有表 ITEMS 并且我将 SELECT 权限授予角色 TESTROLE,输出将是:
SQL> CREATE ROLE TestRole;
SQL> GRANT SELECT ON ITEMS TO TestRole;
SQL> SHOW GRANTS;
/* Grant permissions for this database */
GRANT SELECT ON ITEMS TO ROLE TESTROLE
现在,如果我还分配额外的UPDATE 权限:
SQL> GRANT UPDATE ON ITEMS TO TestRole;
SQL> SHOW GRANTS;
/* Grant permissions for this database */
GRANT SELECT, UPDATE ON ITEMS TO ROLE TESTROLE
SQL>
如果您改为查询系统表 RDB$USER_PRIVILEGES,您将看到下面的列表(+ 数据库所有者的更多权限):
USER GRANTOR PRIVILEGE GRANT_OPTION RELATION_NAME FIELD_NAME USER_TYPE OBJECT_TYPE
----------------------------------------------------------------------------------------
TESTROLE SYSDBA S 0 ITEMS [null] 13 0
TESTROLE SYSDBA U 0 ITEMS [null] 13 0
(为简洁起见,列名中省略了 RDB$ 前缀)
RDB$USER 是获得权限的对象的名称。这里是TESTROLE,它是一个角色(由列RDB$USER_TYPE 值13 表示)。RDB$GRANTOR 是授予权限的用户。RDB$PRIVILEGE 是授予的权利
S: SELECT
U:UPDATE
D: DELETE
I: INSERT
R:REFERENCE(用于创建引用指定表(或特定列)的外键)X: EXECUTE(对于存储过程,也可能是 UDF)RDB$GRANT_OPTION: 1: 用户可以授予其他用户权限,0(有时是NULL),用户不能授予此权限RDB$RELATION_NAME:表名(或其他数据库对象)RDB$FIELD_NAME :表中的列名(NULL 表示对所有列都授予权限)RDB$USER_TYPE :RDB$USER 列的对象类型(13 是角色,8 是普通用户,其他对象类型也是可能的,例如授予存储过程的权限)RDB$OBJECT_TYPE:RDB$RELATION_NAME 的对象类型(例如 0:关系,普通表)。可以从RDB$TYPES 获得对象类型的完整列表(这并不意味着可以授予所有对象类型的权限)。详情请查看文档。
【讨论】:
show grants 或RDB$USER_PRIVILEGES 系统表的示例。
RDB$USER_PRIVILEGES 表中的显示方式。
gsec 实用程序允许管理允许连接到特定 Firebird 服务器实例的用户。即它允许管理 Firebird 服务器可以识别的用户列表(参见gsec manual)。但它不允许您管理每个用户在某个特定数据库中被允许执行的操作。要管理特定数据库中的用户权限,您应该使用角色以及 GRANT 和 REVOKE 语句。
我建议你使用一些GUI工具来管理用户权限,即Flamerobin。
【讨论】: