在数据库中创建对象时,都会为其分配所有者。 所有者通常是执行创建语句的用户。 对于大多数类型的对象,初始状态是只有所有者(或超级用户)可以修改或删除对象。 要允许其他角色或用户使用它,必须授予权限或权限。
PostgreSQL中的不同类型的权限是:
- SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE 和 USAGE。
根据对象的类型(表,函数等),权限将应用于对象。 要为用户分配权限,使用
GRANT
命令。
GRANT的语法
GRANT
命令的基本语法如下:
GRANT
privilege
[,
...]
ON
object
[,
...]
TO
{
PUBLIC
|
GROUP
group
|
username }
- privilege值可以是:SELECT,INSERT,UPDATE,DELETE,RULE,ALL。
- object:要向其授予访问权限的对象的名称。 可能的对象是:表,视图,序列
- PUBLIC:表示所有用户的简短形式。
- GROUP group:授予权限的组。
- username:授予权限的用户的名称。 PUBLIC是表示所有用户的简短形式。
REVOKE的语法
REVOKE
命令的基本语法如下:
REVOKE
privilege
[,
...]
ON
object
[,
...]
FROM
{
PUBLIC
|
GROUP
groupname
|
username }
- privilege值可以是:SELECT,INSERT,UPDATE,DELETE,RULE,ALL。
- object: 授予访问权限的对象的名称。 可能的对象是:表,视图,序列。
- PUBLIC:表示所有用户的简短形式。
- GROUP group:授予权限的组。
- username:授予权限的用户的名称。 PUBLIC是表示所有用户的简短形式。
示例
如要理解权限,我们先创建一个
USER
,如下所示:
yiibai_db
=
# CREATE USER manisha WITH PASSWORD 'password';
CREATE
ROLE
语句
CREATE ROLE
表示创建了一个用户名为
manisha
。
考虑
COMPANY
表有以下记录:
yiibai_db
# select * from COMPANY;
id
|
name
|
age
|
address
|
salary
----+-------+-----+-----------+--------
1
|
Paul
|
32
|
California
|
20000
2
|
Allen
|
25
|
Texas
|
15000
3
|
Teddy
|
23
|
Norway
|
20000
4
|
Mark
|
25
|
Rich
-
Mond
|
65000
5
|
David
|
27
|
Texas
|
85000
6
|
Kim
|
22
|
South
-
Hall
|
45000
7
|
James
|
24
|
Houston
|
10000
(
7
rows
)
接下来,让我们给予用户“
manisha
”在表
COMPANY
上授予所有权限,如下所示:
yiibai_db
=
# GRANT ALL ON COMPANY TO manisha;
GRANT
语句
GRANT
指示所有在COMPANY表上的权限都分配给用户“
manisha
”。
接下来,让我们从用户“
manisha
”中撤销权限,如下所示:
yiibai_db
=
# REVOKE ALL ON COMPANY FROM manisha;
REVOKE
REVOKE
表示从用户“
manisha
”撤消所有权限。甚至可以删除用户,如下所示:
yiibai_db
=
# DROP USER manisha;
DROP
ROLE
DROP ROLE
表示从数据库中删除用户“
manisha
”。