簡體   English   中英

將所有表上的SELECT授予Firebird 2.1中的用戶

[英]Granting SELECT on all tables to a user in Firebird 2.1

我已使用gsec將用戶添加到Firebird 2.1實例中,但現在我想將所有表上的SELECT授予該新用戶。 我可以找到如何在特定表上授予此權限,而不是全部授予它們:

GRANT SELECT ON TABLE table TO USER user;

如果嘗試使用新用戶,則會在isql上收到以下錯誤:

沒有讀取/選擇訪問TABLE 表的權限

有沒有辦法在Firebird 2.1上做到這一點?

像這樣:

EXECUTE BLOCK
AS
  DECLARE VARIABLE tablename VARCHAR(32);
BEGIN
  FOR SELECT rdb$relation_name
  FROM rdb$relations
  WHERE rdb$view_blr IS NULL
  AND (rdb$system_flag IS NULL OR rdb$system_flag = 0)
  INTO :tablename DO
  BEGIN
    EXECUTE STATEMENT ('GRANT SELECT ON TABLE ' || :tablename || ' TO USER TEST');
  END
END

我可以找到如何在特定表上授予此權限,而不是全部授予

您可以向所有已存在但尚未創建的用戶授予特定特權。 這是通過向“ PUBLIC”偽用戶授予特權來實現的。 或者,您可以授予某些ROLE特權,然后將該ROLE授予給定的用戶,然后在數據庫連接期間指定選項,即用戶在此會話中模擬該ROLE

但是,沒有語法可以向所有生成器或所有過程,所有視圖或所有表等授予特權。

請參閱文檔中的GRANT語句語法。

但是,您可以做的是創建一個簡單的腳本(匿名且易失的aka EXECUTE BLOCK或持久性的,並命名為STORED PROCEDURE ),並且您的腳本將查詢系統表以列出所有非系統( COALESCE(RDB$SYSTEM_FLAG,0)=0 )表(與視圖或表而非視圖一起使用:檢查RDB$RELATION_TYPE是0還是0或1),然后形成一系列GRANT語句並逐個執行它們。

請參閱有關EXECUTE BLOCKFOR SELECT ... INTO ... DO ...EXECUTE STATEMENT文檔(或者也可能是FOR EXECUTE STATEMENT ,但我認為FB 2.1中已經不存在它。非正式的Wiki跟蹤哪些語句)從FB版本開始可用,但它不完整,可能包含錯誤: http : //firebirdsql.su/doku.php )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM