public用户权限-----用户公共权限
凡是数据库中的用户都会自动继承 public的权限,以此有可能对数据造成不安全的隐患,下面以例子说明:
实验背景:
1、 数据库用户user_name=ygzhou创建有表tab1、tab2、tab3、tab4、tab5...
2、 需要新建用户user_name=test对表ygzhou.tab1拥有select权限
步骤:
(1) 以sys用戶连接到数据库 sqlplus "/as sysdba"
(2) 创建用户ygzhou,并赋予创建表的权限
SQL>show user; ---------------------->sys
SQL>create user ygzhou identified by ygzhou; ---->创建默认表空间为USER的用户
SQL>grant create table to ygzhou;
SQL>grant unlimited tablespace to ygzhou;
(3) 用户ygzhou创建表tab,并向表中插入数据
SQL>conn ygzhou/ygzhou
SQL>SHOW USER --------->YGZHOU
SQL>CREATE TABLE TAB1(ID INT);---------->创建多个表
SQL>INSERT INTO TAB1 VALUES(1);---------->插入多条数据
(4) 创建用户 test
SQL>CONN SYS/PASSWORD AS SYSDBA
SQL>CREATE USER TEST IDENTIFIED BY TEST;
SQL>grant create session to test;
SQL>grant select on ygzhou.tab1 to test;
ok!
此时用户test只拥有用户下tab1的select权限,对ygzhou用户的其他表没有任何权限。
做public公共权限测试:
(5) 此时对表做public权限设置:
SQL>conn ygzhou/ygzhou
SQL> grant select on tab2 to public;
grant insert on tab3 to public;
grant delete on tab4 to public;
grant update on tab5 to public;
(6) 移除用户test对表tab1的select权限
SQL>conn sys/password as sysdba
SQL>revoke select on ygzhou.tab1 to test;
(7) 验证test用户的权限
SQL>select count(*) from tab2; ------------>查询结果为插入tab2 的数据记录
SQL>insert into tab3 values();----------->可以下用户ygzhou下的表tab3插入数据
.
.
(8) 此时用revoke移除test继承public的权限
revoke select on tab2 from test;-------------------->出现错误、显示无法移除
(9) 在public拥有权限的时候,如果想要让test用户没有权限,只能明确的拒绝用户test
SQL>deny select on tab2 to test;