sql中如何用什么语句给用户授权

sql中如何用什么语句给用户授权,第1张

sql语言用grant语句向用户授予 *** 作权限,grant语句的一般格式为:

grant

<权限>[,<权限>]...

[on

<对象类型>

<对象名>]

to

<用户>[,<用户>]...

[with

grant

option]

其语义为:将对指定 *** 作对象的指定 *** 作权限授予指定的用户。

不同类型的 *** 作对象有不同的 *** 作权限,常见的 *** 作权限如表3-4所示。

表3-4

不同对象类型允许的 *** 作权限

对象

对象类型

*** 作权限

属性列

table

select,

insert,

update,

delete

all

privieges

视图

table

select,

insert,

update,

delete

all

privieges

基本表

table

select,

insert,

update,

alter,

index,delete

all

privieges

数据库

database

createtab

详细信息…

接受权限的用户可以是一个或多个具体用户,也可以是public即全体用户。

如果指定了with

grant

option子句,则获得某种权限的用户还可以把这种权限再授予别的用户。如果没有指定with

grant

option子句,则获得某种权限的用户只能使用该权限,但不能传播该权限。

例1

把查询student表权限授给用户u1

grant

select

on

table

student

to

u1

例2

把对student表和course表的全部权限授予用户u2和u3

grant

all

priviliges

on

table

student,

course

to

u2,

u3

例3

把对表sc的查询权限授予所有用户

grant

select

on

table

sc

to

public

例4

把查询student表和修改学生学号的权限授给用户u4

详细信息…

这里实际上要授予u4用户的是对基本表student的select权限和对属性列sno的update权限。授予关于属性列的权限时必须明确指出相应属性列名。完成本授权 *** 作的sql语句为:

grant

update(sno),

select

on

table

student

to

u4

例5

把对表sc的insert权限授予u5用户,并允许他再将此权限授予其他用户

grant

insert

on

table

sc

to

u5

with

grant

option

详细信息…

执行此sql语句后,u5不仅拥有了对表sc的insert权限,还可以传播此权限,即由u5用户发上述grant命令给其他用户。

例如u5可以将此权限授予u6:

grant

insert

on

table

sc

to

u6

with

grant

option

同样,u6还可以将此权限授予u7:

grant

insert

on

table

sc

to

u7

因为u6未给u7传播的权限,因此u7不能再传播此权限。

例6

dba把在数据库s_c中建立表的权限授予用户u8

grant

createtab

on

database

s_c

to

u8

GRANT

名称

GRANT — 赋予一个用户,一个组或所有用户访问权限

GRANT privilege [, ...] ON object [, ...]

TO { PUBLIC | GROUP group | username }

输入

privilege

可能的权限有:

SELECT

访问声明的表/视图的所有列/字段.

INSERT

向声明的表中插入所有列字段.

UPDATE

更新声明的所有列/字段.

DELETE

从声明的表中删除所有行.

RULE

在表/视图上定义规则 (参见 CREATE RULE 语句).

ALL

赋予所有权限.

object

赋予权限的对象名.可能的对象是:

table (表)

view (视图)

sequence (序列)

index (索引)

PUBLIC

代表是所有用户的简写.

GROUP group

将要赋予权限的组 group .目前的版本中,组必须是用下面方法显式创建的.

username

将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.

输出

CHANGE

如果成功,返回此信息.

ERROR: ChangeAcl: class "object" not found

如果所声明的对象不可用或不可能对声明的组或用户赋予权限.

描述

GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限.

一旦用户有某对象的权限,他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限.

注意

目前,要想在 Postgres 里面只赋予几列权限,你必须创建一个包含那几列的视图(view),然后把权限赋予那几个视图。

使用 psql \z 命令获取关于现存对象权限的更多信息:

Database= lusitania

+------------------+---------------------------------------------+

| Relation|Grant/Revoke Permissions |

+------------------+---------------------------------------------+

| mytable | {"=rw","miriam=arwR","group todos=rw"} |

+------------------+---------------------------------------------+

Legend:

uname=arwR -- privileges granted to a user

group gname=arwR -- privileges granted to a GROUP

=arwR -- privileges granted to PUBLIC

r -- SELECT

w -- UPDATE/DELETE

a -- INSERT

R -- RULE

arwR -- ALL

小技巧: 目前,要创建一个 GROUP (组), 你将不得不手工向表 pg_group 中插入数据,像:

INSERT INTO pg_group VALUES ('todos')

CREATE USER miriam IN GROUP todos

参考 REVOKE 语句重新分配访问权限.

用法

给所有用户向表 films 插入记录的权限:

GRANT INSERT ON films TO PUBLIC

赋予用户 manuel *** 作视图 kinds 的所有权限:

GRANT ALL ON kinds TO manuel

兼容性

SQL92

SQL92 GRANT 语法允许对表中的某单独列/字段设置权限,并且允许设置一权限以赋予别人相同权限.

GRANT privilege [, ...]

ON object [ ( column [, ...] ) ] [, ...]

TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

这些字段与 Postgres 实现是兼容的,除了下面一些例外:

privilege

SQL92 允许声明附加的权限:

SELECT

REFERENCES

允许在一个声明的表的整合约束中使用某些或全部列/字段.

USAGE

允许使用一个域,字符集,集合或事务.如果声明的对象不是表/视图, privilege 只能声明为 USAGE.

object

[ TABLE ] table

SQL92 允许一个附加的非函数关键字 TABLE.

CHARACTER SET

允许使用声明的字符集.

COLLATION

允许使用声明的集合序列.

TRANSLATION

允许使用声明的字符集转换.

DOMAIN

允许使用声明的域.

WITH GRANT OPTION

允许向别人赋予同样权限.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10074491.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存