在Firebird 2.1中向用户授予对所有表的SELECT选择
我已经使用gsec将用户添加到了Firebird 2.1实例,但现在我想将所有表的SELECT授予此新用户。我能找到如何授予对特定表此权限,而不是将它们全部:在Firebird 2.1中向用户授予对所有表的SELECT选择
GRANT SELECT ON TABLE table TO USER user;
如果我尝试使用新的用户我得到ISQL以下错误:
没有许可读取/选择访问表表
有没有办法在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
如果你检查查看源,然后检查“RDB $ EXTERNAL_FILE”。但最好只是检查'RDB $ RELATION_TYPE = 0'///接下来的事情就是枚举所有用户,如果我们不想全部授予'PUBLIC' :-) –
好吧,为了我。我认为这将有一个简单的方法就像在MySQL上,但我想我错了。谢谢! – Bruno
我能找到如何授予对特定表此权限,而不是将它们全部
您可以具体权限授予所有用户,已经存在的和尚未建立。这是通过授予“PUBLIC”伪用户的特权而制定的。或者您可以授予某些ROLE
的权限,然后将此ROLE
授予给定用户,然后在数据库连接期间指定该选项,即用户在此会话中模拟此ROLE
。
但是没有语法授予权限到所有发电机或所有程序或全部观点或全部表等
见文档GRANT
语句的语法。
你可以做什么,虽然,是创建一个简单的脚本(匿名和挥发性又名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有哪些语句是可利用的,因为这FB版本的非官方的wiki跟踪,但它是不彻底并可能包含错误:http://firebirdsql.su/doku.php)。
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-security-privs.html#fblangref25-security-privs-grant
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref-appx04-relations.html
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-psql-coding.html#fblangref25-psql-execstmt
- https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-dml-execblock.html
链接到俄语网站是不是真的有用的国际海事组织。 –
@MarkRotteveel如果在英文中有这样的每个版本的wiki ....没有。虽然检查版本表不需要知道俄罗斯。如果读者好奇,他有www.translate.ru不是很多,但“好于无” –
你执行正确的数据库授权,请说明次确切的步骤,因为这应该工作。 –
@MarkRotteveel我想知道他是否提交了这些赠款并重新启动提取交易,也许可能是交叉交易。 –