Kingbase-数据定义4-权限

权限
对象在创建时会被分配一个所有者,所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
数据库存在多种不同的权限: SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER
CREATE CONNECT TEMPORARY EXECUTE 以及 USAGE 。可以应用于一个特定对象的权限随着对象的类
型(表、函数等)不同而不同。下面将简单介绍如何使用这些权限。
通常只有对象的所有者才可以修改或销毁一个对象的权限。
一个对象可以通过该对象类型相应的 ALTER 命令来重新分配所有者,例如:
ALTER TABLE table_name
OWNER TO new_owner;
超级用户总是可以做到这点,普通角色只有同时是对象的当前所有者(或者是拥有角色的一个成员)以及新
拥有角色的一个成员时才能做同样的事。
要分配权限,可以使用 GRANT 命令。例如,如果 joe 是一个已有角色,而 accounts 是一个已有表,更
新该表的权限可以按如下方式授权:
GRANT UPDATE ON accounts TO joe;
ALL 取代特定权限会把与对象类型相关的所有权限全部授权。
一个特殊的名为 PUBLIC 角色 可以用来向系统中的每一个角色授予一个权限。同时,在数据库中有很
多用户时可以设置 角色来帮助管理权限。详见 数据库角色。
撤销一个权限,使用 REVOKE 命令:
REVOKE ALL ON accounts FROM PUBLIC;
对象拥有者的特殊权限(即执行 DROP GRANT REVOKE 等的权力)总是隐式地属于拥有者,并且不能被
授予或撤销。但是对象拥有者可以选择撤销他们自己的普通权限,例如把一个表变得对他们自己和其他人只
读。
一般情况下,只有对象拥有者(或者超级用户)可以授予或撤销一个对象上的权限。但是可以在授予权限时
使用 ”with grant option” 来允许接收人将权限转授给其他人。如果授予被撤销,则所有从接收人那里获得的权
限(直接或者通过授权链获得)都将被撤销。更多详情请见 GRANT REVOKE 参考页。
可用的特权是 :
SELECT 允许从表、视图、物化视图或其他类似表的对象的任何列或特定列中进行 SELECT 。也允许使
COPY 。在 UPDATE DELETE 中引用现有列值时也需要此特权。对于序列,这个特权还允许使用
currval 函数。对于大型对象,此特权允许读取对象。
INSERT 允许 INSERT ALL|FIRST 将新行插入到表、视图等中。可以在特定的列上授予,在这种情况下,只有
那些列可以在 INSERT 命令中分配 ( 因此其他列将接收默认值 ) 。也允许使用 COPY
UPDATE 允许 UPDATE 表、视图等的任何列或特定列 ( 实际上,任何重要的 UPDATE 命令也需要 SELECT
特权,因为它必须引用表列来确定要更新哪些行,以及 / 或计算列的新值 ) 。除了 SELECT 特权之外,
SELECT ... FOR UPDATE SELECT ... FOR SHARE 需要至少一个列上的这个特权。对于序
列,这个特权允许使用 nextval setval 函数。对于大型对象,此特权允许写入或截断对象。
DELETE 允许从表、视图等中 DELETE 一行 ( 实际上,任何重要的 DELETE 命令都需要 SELECT 特权,因为
它必须引用表列来确定要删除哪些行 )
TRUNCATE 允许对表、视图等进行 TRUNCATE
REFERENCES 允许创建引用表或表的特定列的外键约束。
TRIGGER 允许在表、视图等上创建触发器
CREATE 对于数据库,允许在数据库中创建新的模式和发布。
对于模式,允许在模式中创建新对象。要重命名一个现有对象,您必须拥有对象和对包含的模式有这
个特权。
对于表空间,允许在表空间中创建表、索引和临时文件,并允许创建将表空间作为默认表空间的数据
库。 ( 注意,撤销此特权不会改变现有对象的位置。 )
CONNECT 允许受让人连接到数据库。此特权在连接启动时进行检查 ( 除了检查强加的任何 sys_hba.conf
限制 )
TEMPORARY 允许在使用数据库时创建临时表。
EXECUTE 允许调用函数或过程,包括使用在函数上实现的任何操作符。这是唯一适用于函数和过程的特权
类型。
USAGE 对于过程语言,允许使用该语言创建该语言中的函数。这是惟一适用于过程性语言的特权类型。
对于模式,允许访问模式中包含的对象 ( 假设也满足对象自己的特权要求 ) 。本质上,这允许被授予者
在模式中“查找”对象。没有这个权限,仍然可以看到对象名,例如通过查询系统目录。此外,在撤销
此权限之后,现有会话可能具有先前执行此查找的语句,因此这不是防止对象访问的完全安全的方法。
对于序列,允许使用 currval nextval 函数。
对于类型和域,允许在创建表、函数和其他模式对象时使用类型或域。 ( 请注意,此特权并不控制该类
型的所有“使用”,例如查询中出现的类型值。它只会阻止创建依赖于类型的对象。此特权的主要目的
是控制哪些用户可以创建对类型的依赖项,这可以防止所有者稍后更改类型。 )
对于外部数据包装器,允许使用外部数据包装器创建新服务器。
对于外部服务器,允许使用该服务器创建外部表。受资助者还可以创建、更改或删除与该服务器关联
的自己的用户映射。
其他命令所需的特权列在相应命令的参考页面上。
在创建对象时, KingbaseES 默认将某些类型的对象的权限授予 PUBLIC 。对于表、表列、序列、外部数据包
装器、外部服务器、大型对象、模式或表空间, PUBLIC 缺省情况下不授予任何特权。对于其他类型的对
象,授予 PUBLIC 的默认权限如下 : 数据库的 CONNECT TEMPORARY ( 创建临时表 ) 权限;函数和程序的
EXECUTE 权限;语言和数据类型 ( 包括域 ) USAGE 权限。当然,对象所有者可以撤销的默认权限和明确
授予的权限。 ( 为了获得最大的安全性,在创建对象的同一事务中发出撤销 ; 那么就没有其他用户可以在其中
使用该对象的窗口。 ) 此外,可以使用 ALTER DEFAULT PRIVILEGES 命令重写这些默认的特权设置。
下表 ACL ( 访问控制列表 ) 值中显示用于这些特权类型的单字母缩写。
4.7.1: ACL 特权的缩写
特权
缩写
适用的对象类型
SELECT
r ( read )
LARGE OBJECT , SEQUENCE , TABLE ( 和类似于表的对象 ),
table column
INSERT
a ( append
)
TABLE , table column
UPDATE
w ( write )
LARGE OBJECT , SEQUENCE , TABLE , table column
DELETE
d
TABLE
TRUNCATE
D
TABLE
REFERENCES
x
TABLE , table column
TRIGGER
t
TABLE
CREATE
C
DATABASE , SCHEMA , TABLESPACE
CONNECT
c
DATABASE
TEMPORARY
T
DATABASE
EXECUTE
X
FUNCTION , PROCEDURE
USAGE
U
DOMAIN , FOREIGN DATA WRAPPER , FOREIGN SERVER ,
LANGUAGE , SCHEMA , SEQUENCE , TYPE
下表使用上面所示的缩写,总结每种类型的 SQL 对象可用的特权。还显示了可以用来检查每个对象类型的
权限设置的 ksql 命令。
4.7.3: 访问权限摘要
对象类型
所有权限
默认的 PUBLIC 权限
ksql 命令
DATABASE
CTc
Tc
\l
DOMAIN
U
U
\dD+
FUNCTION or PROCEDURE
X
X
\df+
FORE IGN DATA WRAPPER
U
none
\dew+
FOREIGN SERVER
U
none
\des+
LANGUAGE
U
U
\dL+
LARGE OBJECT
rw
none
SCHEMA
UC
none
\dn+
SEQUENCE
rwU
none
\dp
TABLE (and table-like objects)
arwdDxt
none
\dp
Table column
arwx
none
\dp
TABLESPACE
C
none
\db+
TYPE
U
U
\dT+
为特定对象授予的权限显示为 aclitem 条目列表,其中每个 aclitem 描述了特定授予人授予的一个被授
予人的权限。例如, calvin=r*w/hobbes 指定角色 calvin 具有授予选项 ( * ) 的特权 SELECT ( r ) ,以及
不可授予的特权 UPDATE ( w ) ,两个都是由角色 hobbes 授予的。如果 calvin 也对不同授予人授予的同
一对象具有某些特权,则这些特权将作为单独的 aclitem 条目。 aclitem 中的一个空的受让人字段表示
PUBLIC
例如,假设用户 miriam 创建表 mytable
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
ksql \dp 命令将显示 :
=> \dp mytable
Access privileges
Schema |
Name
| Type
|
Access privileges
| Column privileges | Policies
--------+---------+-------+-----------------------+-------------------+---------
public | mytable | table | miriam = arwdDxt / miriam +| col1:
+|
|
|
| = r / miriam
+| miriam_rw = rw / miriam |
|
|
| admin = arw / miriam
|
|
( 1 row)
如果给定对象的 访问权限 列为空,则表示该对象具有默认权限 ( 即其在相关系统目录中的权限项为空 ) 。缺
省特权始终包括所有者的所有特权,并且根据对象类型,可以包括 PUBLIC 的一些特权,如上所述。第一个
在对象上的 GRANT REVOKE 将实例化默认的特权 ( 例如 “miriam=arwdDxt/miriam“) ,然后根据指定的请
求修改它们。类似地,只有具有非默认特权的列的条目才显示在“列特权”中。 ( 注意 : 对于这个目的,“默认
特权”总是意味着对象类型的内置默认特权。如果一个对象的权限受到了 ALTER DEFAULT PRIVILEGES
命令的影响,那么该对象将始终显示一个显式的权限条目,其中包括 ALTER 后的效果 )
注意,所有者的隐式授予选项在访问权限显示中没有标记。一个 * 只会在授权选项被明确授权给别人的时
候才会出现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值