授予对数据库所有表的访问权限


13

我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USERGRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。

我想将给定数据库中所有表的权限授予指定用户,但是我不确定授予他对整个模式的访问权限是否是最好的主意,public因为我不知道是否允许某种特权升级。还有其他办法吗?


你为什么不能GRANT SELECT ON TableName TO [Domain\User]呢?我通常只是将用户分配给该db_datareader角色,前提是他们需要的只是对所有表的读取权限,但是我不确定您想要的粒度。
Kris Gruttemeyer

我想将所有CRUD授予数据库中的所有表。同样,在该数据库内部进行拖放和创建也可能很有用。
d33tah 2015年

Answers:


19

特权on DATABASE仅授予数据库的常规连接权限,而不再授予其他权限。具有该特权的用户只能看到允许公众看到的内容。

要授予对所有表的读取访问权限,您还需要所有模式和表的特权:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

您可能还希望为将来的模式和表设置默认权限。为在数据库中创建对象的每个角色运行

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

但是您确实需要首先了解整个概念
而且,将特权捆绑在组角色中,然后向/从用户角色授予/撤消组角色几乎总是更好的选择。有关:


myusr错字吗?不是myuser吗?
attomos

1
@attomos:在示例中应该是其他用户。我澄清了
Erwin Brandstetter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.