我尝试过,但在 firebird 数据库中显示和设置用户权限时都失败了。我用了 ;
GSEC> 显示
但它只显示用户名。我想查看所有权利,我想设置它们。我们可以做这样的选择和管理吗?
问候,
Firebirdgsec
实用程序仅管理全局安全数据库中的用户及其密码(security2.fdb
在 Firebird 2.0 和更高版本中)。用户的权限是按数据库管理的(除了 user SYSDBA
),不能用 管理gsec
。
每个数据库的用户权限通过定义角色(可选)、将权限分配给角色和/或用户以及将角色分配给特定数据库中的用户来控制。分配给角色的权限仅在附加时指定角色时应用,否则仅应用用户权限。
分配权限是用GRANT
和完成的REVOKE
。有关详细信息,请查看Firebird 3 发行说明中记录的Firebird 2.5 语言参考章节 Security and changes for Firebird 3和/或Interbase 6.0 操作指南第 5 章数据库安全、Interbase 6.0 语言参考和 Interbase 6.0 数据定义指南(两者可从与操作指南相同的位置下载)和Firebird 语言参考更新中记录的更改。
要显示在数据库中授予的当前权限,您可以使用isql
工具 command 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:Relation,普通表)。可以从中获取对象类型的完整列表RDB$TYPES
(这并不意味着可以对所有对象类型授予权限)。检查文档以获取详细信息。
该gsec
实用程序允许管理允许连接到特定 Firebird 服务器实例的用户。即它允许管理 Firebird 服务器可以识别的用户列表(参见gsec 手册)。但它不允许您管理每个用户在某个特定数据库中被允许执行的操作。为了管理特定数据库中的用户权限,您应该使用角色GRANT
和REVOKE
语句。
我建议您使用一些 GUI 工具来管理用户权限,即Flamerobin。