设置表和视图的权限继承

如果为数据库和架构启用了继承的权限,则授予架构的权限将自动授予其中的所有新表和视图。您还可以显式排除表和视图继承架构权限。

有关哪些表和视图从哪些架构继承权限的信息,请参阅 INHERITING_OBJECTS

有关每个表或视图继承哪些权限的信息,请参阅 INHERITED_PRIVILEGES

设置表和视图的权限继承

CREATE TABLE/ALTER TABLECREATE VIEW/ALTER VIEW 可以允许表和视图从其父架构继承权限。例如,以下语句在架构 s1 上启用继承,因此新表 s1.t1 和视图 s1.myview 会自动继承在该架构上设置的权限(如果适用):

=> CREATE SCHEMA s1 DEFAULT INCLUDE PRIVILEGES;
CREATE SCHEMA
=> GRANT USAGE, CREATE, SELECT, INSERT ON SCHEMA S1 TO PUBLIC;
GRANT PRIVILEGE
=> CREATE TABLE s1.t1 ( ID int, f_name varchar(16), l_name(24));
WARNING 6978:  Table "t1" will include privileges from schema "s1"
CREATE TABLE
=> CREATE VIEW s1.myview AS SELECT ID, l_name FROM s1.t1
WARNING 6978:  View "myview" will include privileges from schema "s1"
CREATE VIEW

如果架构已经存在,您可以使用 ALTER SCHEMA 让所有新创建的表和视图继承架构的权限。但是,在此语句之前在架构上创建的表和视图不受影响:

=> CREATE SCHEMA s2;
CREATE SCHEMA
=> CREATE TABLE s2.t22 ( a int );
CREATE TABLE
...
=> ALTER SCHEMA S2 DEFAULT INCLUDE PRIVILEGES;
ALTER SCHEMA

在此例中,在架构 s2 已经包含表 s2.t22 之后,在该架构上启用继承的权限。要在此表和其他现有表和视图上设置继承,必须使用 ALTER TABLEALTER VIEW 对它们显式设置架构继承:

=> ALTER TABLE s2.t22 INCLUDE SCHEMA PRIVILEGES;

排除表和视图继承权限

您可以使用 CREATE TABLE/ALTER TABLECREATE VIEW/ALTER VIEW 禁止表和视图继承架构权限。

以下示例显示了如何创建不继承架构权限的表:

=> CREATE TABLE s1.t1 ( x int) EXCLUDE SCHEMA PRIVILEGES;

您可以修改现有表,使其不继承架构权限:

=> ALTER TABLE s1.t1 EXCLUDE SCHEMA PRIVILEGES;