Sql 如何将视图上的所有权限授予任意用户
如何向任意用户授予对所有函数和视图的读取/选择访问权限 我使用psql--user=postgres-d mydb-f myview.sql创建几个函数和视图,然后运行:Sql 如何将视图上的所有权限授予任意用户,sql,database,postgresql,grant,pgadmin,Sql,Database,Postgresql,Grant,Pgadmin,如何向任意用户授予对所有函数和视图的读取/选择访问权限 我使用psql--user=postgres-d mydb-f myview.sql创建几个函数和视图,然后运行: GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; 在获得所有特权之后,我希望myuser现在能够访问postgres用户创建的函数和视图。但是,当我尝试使用myuser访问它们时,会出现“关系权限被拒绝…”错误。这是为什么?原因是您需要额外的权限才能访问视图或表。对数据库的权限
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
在获得所有特权之后,我希望
myuser
现在能够访问postgres
用户创建的函数和视图。但是,当我尝试使用myuser
访问它们时,会出现“关系权限被拒绝…”错误。这是为什么?原因是您需要额外的权限才能访问视图或表。对数据库的权限不包括对其中所有对象的访问
它与函数不同:EXECUTE
权限默认授予public
但该功能以当前用户的权限执行。您可能对的安全定义器
修饰符感兴趣。但通常,在涉及的表上授予SELECT
就足够了
根据对象类型的不同,初始默认权限可能不同
包括向PUBLIC
授予一些特权。默认值为no public
对表、列、模式和表空间的访问<代码>连接
数据库的特权和TEMP
表创建特权<代码>执行
职能特权;和使用
语言特权
您可能对此DDL命令感兴趣(需要Postgres9.0或更高版本):
当然,在连接到相关数据库时(请参见下文),作为具有足够权限的用户。您可能还对设置默认权限感兴趣
:
或者您可以查询系统目录以创建用于批量授予/撤销的DDL语句…我花了一个小时才意识到“向myuser公共模式中的所有表授予SELECT;”只有在授予权限的用户连接到该数据库时执行此命令才有意义。如果没有,它就什么也不做(或者至少它没有给用户select权限)。在超级用户的shell中使用\c databasename。这不会授予用户对序列的权限。@Cerin:问题是询问视图,您不需要序列的权限(至少在编写时还没有实现可更新视图)。有关更多特权,请参阅:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;