![](/img/trans.png)
[英]How to get last inserted records(row) in all tables in Firebird database?
[英]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 BLOCK
和FOR 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.