我試過了,但所有的時間都在Firebird數據庫中顯示和設置用戶權限失敗。我用了 ;如何顯示和設置火鳥數據庫中的用戶權限
GSEC> display
但它只是顯示用戶名。我想看到所有權利,我想設置它們。我們可以做這樣的選擇和管理嗎?
問候,
我試過了,但所有的時間都在Firebird數據庫中顯示和設置用戶權限失敗。我用了 ;如何顯示和設置火鳥數據庫中的用戶權限
GSEC> display
但它只是顯示用戶名。我想看到所有權利,我想設置它們。我們可以做這樣的選擇和管理嗎?
問候,
Firebird gsec
實用程序只管理全球安全數據庫中的用戶及其密碼(Firebird 2.0及更高版本中的security2.fdb
)。每個數據庫管理用戶的權限(用戶SYSDBA
除外),不能使用gsec
進行管理。
每數據庫用戶權限是通過在一個特定的數據庫定義角色(可選地),以角色和/或用戶分配權限,並分配角色到用戶控制。分配給角色的權利僅適用於在附加上指定角色時,否則僅應用用戶權限。
分配權限與GRANT
和REVOKE
完成。有關詳細信息,請檢查在Firebird 3 release notes記錄火鳥3 Firebird 2.5 Language Reference chapter Security和變化,和/或Interbase 6.0 Operations Guide,第5章數據庫安全,Interbase的6.0語言參考和Interbase的6.0數據定義指南(來自同一位置的操作指導都下載)和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
你會看到下面(+多爲DB所有者權益)名單:
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
授予權:(REFERENCE
(用於創建外鍵引用指定表:SELECT
U
:UPDATE
D
:DELETE
I
:INSERT
R
或特定列))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
獲得(這並不意味着可以對所有對象類型授予權限)。查看文檔以獲取詳細信息。
的gsec
實用程序允許一個管理被允許連接到特定的火鳥服務器實例的用戶。即它允許管理Firebird服務器將識別的用戶列表(請參見gsec manual)。但它不允許您管理每個用戶在某些特定數據庫中允許執行的操作。要管理特定數據庫中的用戶權限,您應該使用角色和GRANT
和REVOKE
語句。
我建議你使用一些GUI工具來管理用戶權限,即Flamerobin。
謝謝馬克我已經嘗試了你所說的話。但沒有什麼有用的。:( – goGud
更具體的'沒有用'並不真的幫助我找到你缺少的信息, –
@MusaGezer我已經包括了一個例子,你如何使用'show grants'或'RDB $ USER_PRIVILEGES'系統表 –