2013-07-15 26 views
2

我試過了,但所有的時間都在Firebird數據庫中顯示和設置用戶權限失敗。我用了 ;如何顯示和設置火鳥數據庫中的用戶權限

GSEC> display

但它只是顯示用戶名。我想看到所有權利,我想設置它們。我們可以做這樣的選擇和管理嗎?

問候,

回答

5

Firebird gsec實用程序只管理全球安全數據庫中的用戶及其密碼(Firebird 2.0及更高版本中的security2.fdb)。每個數據庫管理用戶的權限(用戶SYSDBA除外),不能使用gsec進行管理。

每數據庫用戶權限是通過在一個特定的數據庫定義角色(可選地),以角色和/或用戶分配權限,並分配角色到用戶控制。分配給角色的權利僅適用於在附加上指定角色時,否則僅應用用戶權限。

分配權限與GRANTREVOKE完成。有關詳細信息,請檢查在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
    • UUPDATE
    • DDELETE
    • IINSERT
    • R或特定列))
    • XEXECUTE(存儲過程,也許還UDF)的
  • RDB$GRANT_OPTION1:用戶權限授予其他用戶,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獲得(這並不意味着可以對所有對象類型授予權限)。查看文檔以獲取詳細信息。

+0

謝謝馬克我已經嘗試了你所說的話。但沒有什麼有用的。:( – goGud

+1

更具體的'沒有用'並不真的幫助我找到你缺少的信息, –

+0

@MusaGezer我已經包括了一個例子,你如何使用'show grants'或'RDB $ USER_PRIVILEGES'系統表 –

2

gsec實用程序允許一個管理被允許連接到特定的火鳥服務器實例的用戶。即它允許管理Firebird服務器將識別的用戶列表(請參見gsec manual)。但它不允許您管理每個用戶在某些特定數據庫中允許執行的操作。要管理特定數據庫中的用戶權限,您應該使用角色和GRANTREVOKE語句。

我建議你使用一些GUI工具來管理用戶權限,即Flamerobin

+0

我也搜索GRANT和REVOKE,但我找不到我要找的東西 – goGud

+0

如果你的意思是你沒有找到這些命令的語法,那麼請看Mark的答案,他在鏈接到IB手冊的地方記錄下來。 – ain

相關問題