前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于WITH ADMIN OPTION和WITH GRANT OPTION

关于WITH ADMIN OPTION和WITH GRANT OPTION

原创
作者头像
start.zhou
修改2021-04-09 10:10:08
1.8K0
修改2021-04-09 10:10:08
举报
文章被收录于专栏:oracle dbaoracle dba

腾讯云社区的朋友们大家好啊。

最近在学习SQL,关于WITH ADMIN OPTION和WITH GRANT OPTION有什么区别呢。

Follow me!

1.数据库权限概念

权限Privileges是执行特定与语句的权限。

数据库安全包括了系统安全和数据安全。

系统权限:获得数据库的访问权限,并且能执行特定DDL操作(系统安全)。

对象权限:处理数据库对象的内容 比如SELECT UPDATE INSERT.....(数据安全)。

方案/模式(SCHEMA):对象的集合,例如表、视图、序列和同义词的集合。并且SCHEMA和USER是同名。

通过使用DCL语言为用户赋权(GRANT),和撤销权限(REVOKE)

用户的系统权限:

CREATE SESSION创建会话

CREATE TABLE创建表

CREATE SEQUENCE创建序列

CREATE VIEW创建视图

CREATE PROCEDURE创建存储过程

WITH ADMIN OPTION 用于系统权限授权,WITH GRANT OPTION 用于对象权限授权。

接下来通过一个小实验带大家彻底了解两个授权的区别。

2.实验环节

a.环境准备

代码语言:sql
复制
--创建两个用户赋予密码确保用户为非锁定状态,并查看用户的系统权限
CREATE USER a IDENTIFIED BY oracle ACCOUNT UNLOCK;
CREATE USER b IDENTIFIED BY oracle ACCOUNT UNLOCK;
--查看用户权限
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='A';
no rows selected
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='B';
no rows selected
--新创建的用户无任何权限

b.WITH ADMIN OPTION权限实验

代码语言:sql
复制
--将创建会话权限授予A用户
SYS@10.10.10.1:1521/ORCLPDB>GRANT CREATE SESSION TO a WITH ADMIN OPTION;
Grant succeeded.
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='A';
G PRIVILEGE
- ----------------------------------------
A CREATE SESSION

--连上A用户将CREATE SESSION权限授予B用户
SYS@10.10.10.1:1521/ORCLPDB>conn a/oracle@10.10.10.1:1521/ORCLPDB
Connected.
A@10.10.10.1:1521/ORCLPDB>GRANT CREATE SESSION TO b;
Grant succeeded.

--此时查看A和B用户的权限(在具有DBA权限用户下查询,我这里是sys用户)
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE in ('A','B');
GRANT PRIVILEGE
----- ----------------------------------------
A     CREATE SESSION
B     CREATE SESSION

--此时A和B都具有创建会话的权限了,测试能不能登录
SYS@10.10.10.1:1521/ORCLPDB>conn a/oracle@10.10.10.1:1521/ORCLPDB
Connected.
A@10.10.10.1:1521/ORCLPDB>show user
USER is "A"
A@10.10.10.1:1521/ORCLPDB>conn b/oracle@10.10.10.1:1521/ORCLPDB
Connected.
B@10.10.10.1:1521/ORCLPDB>show user
USER is "B"

--A和B用户都能正常登录,此时将A权限收回
SYS@10.10.10.1:1521/ORCLPDB>REVOKE CREATE SESSION FROM A;
Revoke succeeded.
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE in ('A','B');
GRANT PRIVILEGE
----- ----------------------------------------
B     CREATE SESSION

--此时A的权限被撤销了,B的权限还在。测试一下A,B的登录情况
SYS@192.168.62.1:1521/ORCLPDB>conn a/oracle@10.10.10.1:1521/ORCLPDB
ERROR:
ORA-01045: user A lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
@>conn b/oracle@10.10.10.1:1521/ORCLPDB
Connected.
B@10.10.10.1:1521/ORCLPDB>

我们发现A用户的CREATE SESSION系统权限被收回,但是B用户的CREATE SESSION系统权限没被收回

c.WITH GRAT OPTION权限实验

代码语言:sql
复制
--授予A用户CREATE SESSION
SYS@10.10.10.1:1521/ORCLPDB>GRANT CREATE SESSION TO a;
Grant succeeded.
SYS@10.10.10.1:1521/ORCLPDB>select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE in ('A','B');
GRANT PRIVILEGE
----- ----------------------------------------
A     CREATE SESSION
B     CREATE SESSION

--登录HR用户,将EMPLOYEES表的SELECT权限授予A用户,另赋予WITH GRANT OPTION
B@10.10.10.1:1521/ORCLPDB>conn hr/hr@10.10.10.1:1521/ORCLPDB
Connected.
HR@10.10.10.1:1521/ORCLPDB>GRANT SELECT ON  EMPLOYEES TO a WITH GRANT OPTION;
Grant succeeded.
HR@192.168.62.1:1521/ORCLPDB>select GRANTOR,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs where GRANTOR ='A';

GRANTOR    OWNER      TABLE_NAME           PRIVILEGE
---------- ---------- -------------------- ----------------------------------------
A          HR         EMPLOYEES            SELECT

--登录到A用户将EMPLOYEES的SELECT权限授予B用户,并查询A,B的用户权限
A@10.10.10.1:1521/ORCLPDB>GRANT SELECT ON HR.EMPLOYEES TO b;
Grant succeeded.

--登录到B用户查询授权者为A的条目
A@10.10.10.1:1521/ORCLPDB>conn b/oracle@10.10.10.1:1521/ORCLPDB
Connected.
B@10.10.10.1:1521/ORCLPDB>select GRANTOR,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs where GRANTOR ='A';

GRANTOR    OWNER      TABLE_NAME           PRIVILEGE
---------- ---------- -------------------- ----------------------------------------
A          HR         EMPLOYEES            SELECT

--这里在B上看见一条授权者为A,对象为HR.EMPLOYEES的表的SELECT权限。测试一下权限没毛病。
B@10.10.10.1:1521/ORCLPDB>select * from hr.employees;

--登录HR用户收回HR.EMPLOYEES的SELECT权限
HR@10.10.10.1:1521/ORCLPDB>REVOKE SELECT ON EMPLOYEES FROM a;
Revoke succeeded.

--再检查A.B的权限
HR@10.10.10.1:1521/ORCLPDB>select GRANTOR,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs where GRANTOR ='A';
no rows selected
HR@10.10.10.1:1521/ORCLPDB>select GRANTOR,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs where GRANTOR ='B';
no rows

我们发现A和B的SELECT ON HR.EMPLOYEES的权限都被收回

d.得出结论:

被WITH ADMIN OPTION权限赋予的系统权限,在赋予账号的该系统权限被回收时,被WITH ADMIN OPTION权限授予的系统权限并不会被回收。

WITH GRANT OPTION权限赋予的对象权限,在赋予用户的该权限被回收时,被WITH GRANT OPTION授予用户的对象权限也一并被级联收回。

?END!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数据库权限概念
  • 2.实验环节
    • a.环境准备
      • b.WITH ADMIN OPTION权限实验
        • c.WITH GRAT OPTION权限实验
          • d.得出结论:
            • 被WITH ADMIN OPTION权限赋予的系统权限,在赋予账号的该系统权限被回收时,被WITH ADMIN OPTION权限授予的系统权限并不会被回收。
              • WITH GRANT OPTION权限赋予的对象权限,在赋予用户的该权限被回收时,被WITH GRANT OPTION授予用户的对象权限也一并被级联收回。
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档