Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将视图上的所有权限授予任意用户_Sql_Database_Postgresql_Grant_Pgadmin - Fatal编程技术网

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访问它们时,会出现“关系权限被拒绝…”错误。这是为什么?原因是您需要额外的权限才能访问视图或表。对数据库的权限

如何向任意用户授予对所有函数和视图的读取/选择访问权限

我使用psql--user=postgres-d mydb-f myview.sql创建几个函数和视图,然后运行:

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;