/*
控制用户权限及练习
*/
--
--创建一个用户
CREATE USER czh
IDENTIFIED BY czh
--授予权限(授予czh这个用户登录的权限)
GRANT CREATE SESSION
TO czh
--授予权限
GRANT CREATE TABLE
TO czh
--创建用户表空间(用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表)
--
ALTER USER czh QUOTA 5m
ON USERS
--
ALTER USER czh QUOTA UNLIMITED
ON USERS
--修改czh用户的密码(不是只有dba才可以修改czh这个用户的密码,czh这个用户自己本身也可以修改自己的密码)
ALTER USER czh
IDENTIFIED BY 123
--
--创建角色
CREATE ROLE my_manager
--把权限赋给角色
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW
TO my_manager
--创建一个新用户
CREATE USER czh02
IDENTIFIED BY czh02
--把角色授予用户
GRANT my_manager
TO czh02
--
--授予对象权限给czh, czh02这2个用户
GRANT SELECT
ON scott.employees
TO czh, czh02
--授予对象权限给czh, czh02这2个用户
GRANT SELECT, UPDATE, INSERT
ON scott.employees
TO czh, czh02
/*
--授予多个对象权限给czh, czh02这2个用户
--以下这种写法会报错,on后面不能写多个对象(on后面写了多张表对象,这种写法是不支持)
GRANT SELECT, UPDATE
ON scott.employees, scott.departments
TO czh, czh02
*/
--WITH GRANT OPTION表示:使用户同样具有分配权限的权利
SELECT * FROM
scott.locations
--
GRANT SELECT, UPDATE
ON scott.locations
TO czh
WITH GRANT OPTION
--
GRANT SELECT, UPDATE
ON scott.jobs
TO czh
WITH GRANT OPTION
--PUBLIC关键字表示:向数据库中所有用户分配权限
GRANT SELECT, UPDATE
ON scott.job_grades
TO PUBLIC
--收回对象对象
REVOKE SELECT, UPDATE
ON scott.LOCATIONS
FROM czh02
--用户拥有的关于表对象权限
select * from USER_TAB_PRIVS_RECD
/*
数据字典视图 描述
ROLE_SYS_PRIVS 角色拥有的系统权限
ROLE_TAB_PRIVS 角色拥有的对象权限
USER_ROLE_PRIVS 用户拥有的角色
USER_TAB_PRIVS_MADE 用户分配的关于表对象权限
USER_TAB_PRIVS_RECD 用户拥有的关于表对象权限
USER_COL_PRIVS_MADE 用户分配的关于列的对象权限
USER_COL_PRIVS_RECD 用户拥有的关于列的对象权限
USER_SYS_PRIVS 用户拥有的系统权限
*/
--
SELECT *
FROM USER_SYS_PRIVS
--
SELECT *
FROM USER_TAB_PRIVS_MADE
--收回权限
REVOKE SELECT, UPDATE, INSERT
ON scott.EMPLOYEES
FROM czh02
/*
总结:使用 DCL 控制数据库权限
语句 功能
CREATE USER 创建用户(通常由DBA完成)
GRANT 分配权限
CREATE ROLE 创建角色(通常由DBA完成)
ALTER USER 修改用户密码
REVOKE 收回权限
*/
/*
练习题
*/
--如果用户能够登陆到数据库,至少需要哪种权限?是系统权限还是对象权限
--CREATE SESSION 系统权限
--创建表需要哪种权限?
--CREATE TABLE 或者 CREATE ANY TABLE都可以 (CREATE TABLE也是系统权限)
--将表departments的查询权限分配给用户system
GRANT SELECT
ON departments
TO SYSTEM
--从system处收回刚才赋予的权限
REVOKE SELECT
ON departments
FROM SYSTEM
/*
创建角色dvp,并将如下权限赋予该角色
CREATE PROCEDURE
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
*/
--创建角色
CREATE ROLE dvp
--将权限赋予dvp角色
GRANT CREATE PROCEDURE, CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW
TO dvp
/*
控制用户权限及练习
*/
--
--创建一个用户
CREATE USER czh
IDENTIFIED BY czh
--授予权限(授予czh这个用户登录的权限)
GRANT CREATE SESSION
TO czh
--授予权限
GRANT CREATE TABLE
TO czh
--创建用户表空间(用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表)
--
ALTER USER czh QUOTA 5m
ON USERS
--
ALTER USER czh QUOTA UNLIMITED
ON USERS
--修改czh用户的密码(不是只有dba才可以修改czh这个用户的密码,czh这个用户自己本身也可以修改自己的密码)
ALTER USER czh
IDENTIFIED BY 123
--
--创建角色
CREATE ROLE my_manager
--把权限赋给角色
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW
TO my_manager
--创建一个新用户
CREATE USER czh02
IDENTIFIED BY czh02
--把角色授予用户
GRANT my_manager
TO czh02
--
--授予对象权限给czh, czh02这2个用户
GRANT SELECT
ON scott.employees
TO czh, czh02
--授予对象权限给czh, czh02这2个用户
GRANT SELECT, UPDATE, INSERT
ON scott.employees
TO czh, czh02
/*
--授予多个对象权限给czh, czh02这2个用户
--以下这种写法会报错,on后面不能写多个对象(on后面写了多张表对象,这种写法是不支持)
GRANT SELECT, UPDATE
ON scott.employees, scott.departments
TO czh, czh02
*/
--WITH GRANT OPTION表示:使用户同样具有分配权限的权利
SELECT * FROM
scott.locations
--
GRANT SELECT, UPDATE
ON scott.locations
TO czh
WITH GRANT OPTION
--
GRANT SELECT, UPDATE
ON scott.jobs
TO czh
WITH GRANT OPTION
--PUBLIC关键字表示:向数据库中所有用户分配权限
GRANT SELECT, UPDATE
ON scott.job_grades
TO PUBLIC
--收回对象对象
REVOKE SELECT, UPDATE
ON scott.LOCATIONS
FROM czh02
--用户拥有的关于表对象权限
select * from USER_TAB_PRIVS_RECD
/*
数据字典视图 描述
ROLE_SYS_PRIVS 角色拥有的系统权限
ROLE_TAB_PRIVS 角色拥有的对象权限
USER_ROLE_PRIVS 用户拥有的角色
USER_TAB_PRIVS_MADE 用户分配的关于表对象权限
USER_TAB_PRIVS_RECD 用户拥有的关于表对象权限
USER_COL_PRIVS_MADE 用户分配的关于列的对象权限
USER_COL_PRIVS_RECD 用户拥有的关于列的对象权限
USER_SYS_PRIVS 用户拥有的系统权限
*/
--
SELECT *
FROM USER_SYS_PRIVS
--
SELECT *
FROM USER_TAB_PRIVS_MADE
--收回权限
REVOKE SELECT, UPDATE, INSERT
ON scott.EMPLOYEES
FROM czh02
/*
总结:使用 DCL 控制数据库权限
语句 功能
CREATE USER 创建用户(通常由DBA完成)
GRANT 分配权限
CREATE ROLE 创建角色(通常由DBA完成)
ALTER USER 修改用户密码
REVOKE 收回权限
*/
/*
练习题
*/
--如果用户能够登陆到数据库,至少需要哪种权限?是系统权限还是对象权限
--CREATE SESSION 系统权限
--创建表需要哪种权限?
--CREATE TABLE 或者 CREATE ANY TABLE都可以 (CREATE TABLE也是系统权限)
--将表departments的查询权限分配给用户system
GRANT SELECT
ON departments
TO SYSTEM
--从system处收回刚才赋予的权限
REVOKE SELECT
ON departments
FROM SYSTEM
/*
创建角色dvp,并将如下权限赋予该角色
CREATE PROCEDURE
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
*/
--创建角色
CREATE ROLE dvp
--将权限赋予dvp角色
GRANT CREATE PROCEDURE, CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW
TO dvp