SinoDB用户权限

  SinoDB用户权限是由数据库对象和操作类型两个要素组成的,定义一个用户的权限就是定义这个用户可以对哪些数据对象进行哪些类型的操作。

  SinoDB使用了三级权限来保证数据的安全性,它们分别是数据库级权限,表级权限和字段级权限。

1. 数据库级别权限

① CONNECT
   这是级别最低的一种数据库级别的用户权限。拥有该权限的用户可以执行SELETE,UPDATE,INSERT,DELETE语句,针对数据表执行存储过程,创建数据表的视图,创建临时表。

② RESOURCE
  拥有该权限的用户除了拥有CONNECT全部权限外,还可以创建新的表,并可以对自己创建的表执行ALTER和DROP操作,创建索引。

③ DBA
  数据库的建立者和拥有者被自动授予这种权限。拥有DBA权限的用户除拥有RESOURCE全部权限外,还可以对其他用户授予或解除CONNECT,RESOURCE,DBA权限,可以对所有数据库对象进行操作。

语法

GRANT 权限 TO 用户名[,用户名];
REVOKE 权限 FROM 用户名[,用户名];

2. 表级与字段级权限

① INSERT:可以向表中增加新数据。
② DELETE:可以删除表中数据。
③ SELECT:可以查询表中记录(可扩展到字段)。
④ UPDATE:可以修改表中记录(可扩展到字段)。
⑤ REFERENCES:可以制定指定约束条件(可扩展到字段)。
⑥ INDEX:可以建立或删除索引。
⑦ ALTER:可以改变表结构。
⑧ ALL:包括以上所有权限。

语法

GRANT 权限[,权限] [(字段名[,字段名])] ON 表名 TO 用户名[,用户名]
REVOKE 权限[,权限] [(字段名[,字段名])] ON 表名 FROM 用户名[,用户名]

3.用户授权演示

示例1:创建系统级别用户:sino,并授予testdb数据库的connect/resource权限。

1、root用户登陆shell,创建操作系统用户sino.
useradd -g sinodbms -d /home/sino -s /bin/bash -m sino

2、用sinodbms用户dbaccess登录相应数据库给sino用户赋权。
su - sinodbms
dbaccess testdb -
grant connect to sino;
grant resource to sino;

3、切换sino用户登录数据库 ,使数据库环境变量生效,即可访问数据库
su - sino
source /home/sinodbms/.bash_profile
dbaccess testdb -

示例2:创建系统级别用户:sinocx,只授予testdb数据库下表t_employee字段f_employeeid与f_employeename的查询权限。

1、 testdb数据库下有表t_employee 如下:
create table “sinodbms”.t_employee
(
f_employeeid integer,
f_deptid integer,
f_employeename varchar(50),
f_salary money(16,2)
);

2、root用户登陆shell,创建操作系统用户sinocx
useradd -g sinodbms -d /home/sinocx -s /bin/bash -m sinocx

3、用sinodbms用户dbaccess登录相应数据库给sinocx用户赋权。
su - sinodbms
dbaccess testdb -
grant connect to sinocx;

4、切换sinocx用户登录数据库 ,使数据库环境变量生效,即可访问数据库
su - sinocx
source /home/sinodbms/.bash_profile
dbaccess testdb -

此时sinocx用户对表具有执行select、insert、update和delete语句的权限。

5.回收系统默认赋予public的all权限,只授予sinocx用户表t_employee(f_employeeid,f_employeename)的查询权限。
revoke all on t_employee from public;
grant select (f_employeeid,f_employeename) on t_employee to sinocx;

6.此时使用sinocx用户去查询/插入t_employee表显示结果如下:

[sinocx@vm84145 ~]$ dbaccess testdb -

Database selected.

> select * from t_employee;

f_employeeid f_employeename                                     

           1 Tom                                               
           2 Jack                                              
           3 Mary                                              
           4 Henry                                             
           5 Rose                                              
           6 Bill                                              
           7 Kate                                              
           8 Bob                                               
           9 Will                                              
          10 Judy                                              

10 row(s) retrieved.

> insert into t_employee (f_employeeid,f_employeename) values(11,'Ryan');

  275: The Insert privilege is required for this operation.
Error in line 1
Near character position 24
>