用户和权限
来源:互联网 发布:四维码扫描软件下载 编辑:程序博客网 时间:2024/06/09 23:41
创建用户
CREATE USER user_name IDENTIFIED BY password;
DROP USER user_name [cascade];
ALTER USER user_name ACCOUNT [UN]LOCK;
什么是权限
权限就是用来控制特定的用户发送特定的SQL语句是否允许正确的执行
在多用户环境,DBA需要维护数据库访问的安全
以确保特定用户拥有特定的操作权限
数据库的权限分为
系统权限
对象权限
系统权限
大部分是针对对象的创建,删除,修改,审计等等的操作
查看系统都具备哪些权限
select PRIVILEGE from dba_sys_privs;
查看当前会话都具备哪些权限
select * from session_privs;
对象权限
授予特定用户对特定对象的权限
特定对象:表、视图、序列、过程、函数、程序包上。
角色
系统中有166个权限 我们不便于管理
于是oracle对很多需求的权限定义成了角色的模式 来方便我们管理
角色就是一组权限的集合
我们也可以自己建立包含自己拟定权限的角色
查看oracle给你定制了哪些角色
select distinct GRANTEd_role from dba_role_privs ;
常见的角色中包含的权限
dba connect resource
查看角色中都包含了哪些权限
session A:> select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='RESOURCE';
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
RESOURCE CREATE TRIGGER
RESOURCE CREATE SEQUENCE
RESOURCE CREATE TYPE
RESOURCE CREATE PROCEDURE
RESOURCE CREATE CLUSTER
RESOURCE CREATE OPERATOR
RESOURCE CREATE INDEXTYPE
RESOURCE CREATE TABLE
8 rows selected.
session A:> select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='CONNECT';
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
CONNECT CREATE SESSION
session A:>
CREATE any table和create table他们是有区别的
可以在任意用户模式下建表
只可以在自己的模式下建表
用户被创建后,就需要授予他系统权限,刚创建的用户连登陆权限都没有(create session)
对于应用开发用户需要的基本权限:
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE
授权通过grant
语法:
GRANT object_priv[(columns)]
[ON object]
TO {user|role|public}
[WITH GRANT OPTION]
回收通过revoke
语法:
REVOKE {privilege[,privilege...]|ALL}
[ON object]
FROM {user[,user...]|role|PUBLIC}
[CASCADE CONSTRAINTS]
SYS@ora10g> create user u1 identified by p1;
User created.
SYS@ora10g> grant connect,resource to u1;
Grant succeeded.
SYS@ora10g> desc dba_role_privs;
Name Null? Type
----------------------------------------------------------- -------- ----------------------------------------
GRANTEE VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
DEFAULT_ROLE VARCHAR2(3)
SYS@ora10g> select * from dba_role_privs where GRANTEE='U1';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
U1 RESOURCE NO YES
U1 CONNECT NO YES
SYS@ora10g> revoke RESOURCE,CONNECT from u1;
Revoke succeeded.
SYS@ora10g> select * from dba_role_privs where GRANTEE='U1';
no rows selected
session A:> alter user u1 account lock;
User altered.
session A:> alter user u1 account unlock;
User altered.
session A:>
SYS@ora10g> drop user u1;
User dropped.
SYS@ora10g>
如果用户模式下有对象是不能删除用户的 可以加cascade连同对象一起删
session A:> create table u1.t as select * from scott.emp;
Table created.
session A:> drop user u1;
drop user u1
*
ERROR at line 1:
ORA-01922: CASCADE must be specified to drop 'U1'
session A:> drop user u1 cascade;
User dropped.
session A:>
角色操作
session B:> drop role r1;
Role dropped.
session B:> create role r1;
Role created.
session B:> grant connect,create table to r1;
Grant succeeded.
session B:> create role r2;
Role created.
session B:> grant create view to r2;
Grant succeeded.
session B:> grant r2 to r1;
Grant succeeded.
session B:> grant r1 to scott;
Grant succeeded.
session B:>
授权的级联
grant选项
with admin option 权限回收无级联 适用系统权限和角色
with grant option 权限回收有级联 适用对象权限
session B:> create user u1 identified by u1;
User created.
session B:> create user u2 identified by u2;
User created.
session B:> grant connect to u1 with grant option;
grant connect to u1 with grant option
*
ERROR at line 1:
ORA-01939: only the ADMIN OPTION can be specified
session B:> grant connect to u1 with admin option;
Grant succeeded.
session B:> conn u1/u1
Connected.
session B:> grant connect to u2 ;
Grant succeeded.
session B:> conn / as sysdba
Connected.
session B:> select * from dba_role_privs where GRANTEE in ('U1','U2');
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
U2 CONNECT NO YES
U1 CONNECT YES YES
session B:> revoke connect from u1;
Revoke succeeded.
session B:> select * from dba_role_privs where GRANTEE in ('U1','U2');
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
U2 CONNECT NO YES
session B:>
恢复U1的connect权限 再测试对象权限
session B:> select * from dba_role_privs where GRANTEE in ('U1','U2');
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
U2 CONNECT NO YES
U1 CONNECT NO YES
session B:>
session B:> grant select on scott.emp to u1 with admin option;
grant select on scott.emp to u1 with admin option
*
ERROR at line 1:
ORA-00993: missing GRANT keyword
session B:> grant select on scott.emp to u1 with grant option;
Grant succeeded.
session B:> conn u1/u1
Connected.
session B:> grant select on scott.emp to u2;
Grant succeeded.
session B:> conn / as sysdba
Connected.
session B:> COL GRANTEE FOR A20
session B:> COL OWNER FOR A20
session B:> COL TABLE_NAME FOR A20
session B:> COL GRANTOR FOR A20
session B:> COL PRIVILEGE FOR A20
session B:>
session B:> select * from dba_TAB_privs where GRANTEE in ('U1','U2');
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
------------------------------ ---------- ---------- ---------- -------------------- --- ---
U2 SCOTT EMP U1 SELECT NO NO
U1 SCOTT EMP SCOTTSELECT YES NO
session B:> revoke select on scott.emp from u1;
Revoke succeeded.
session B:> select * from dba_TAB_privs where GRANTEE in ('U1','U2');
no rows selected
session B:>
U2的也被回收了 回收级联
访问不同模式中的表
模式schema
模式是一个逻辑的概念 是一组对象的集合
一个用户创建了,那么该用户的schema名等于用户名,并作为该用户缺省schema。
这也就是我们看到schema名都为数据库用户名的原因
模式是可以切换的 这样可以实现以A用户的身份去访问B用户的模式
SQL> conn / as sysdba
SQL> drop user u2 cascade;
User dropped.
SQL> drop user u1 cascade;
User dropped.
SQL> create user u1 identified by u1;
User created.
SQL> grant connect,resource,select any table to u1;
Grant succeeded.
SQL> create user u2 identified by u2;
User created.
SQL> grant connect,resource,select any table to u2;
Grant succeeded.
SQL> create table u1.tt(ename varchar2(10));
Table created.
SQL> insert into u1.tt values('U1');
1 row created.
SQL> create table u2.tt(ename varchar2(10));
Table created.
SQL> insert into u2.tt values('U2');
1 row created.
SQL> conn u1/u1
Connected.
SQL> select * from tt;
ENAME
----------
U1
SQL> alter session set current_schema=u2;
Session altered.
SQL> select * from tt;
ENAME
----------
U2
SQL> show user
USER is "U1"
SQL>
了解这个概念即可 因为我们基本不会改用户的模式,而是通过在对象前使用schema前缀 例如scott.emp来实现模式转换的.
- Oracle 用户和权限
- Linux用户和权限
- 用户和权限管理
- 用户、权限和角色
- 用户和权限
- mysql用户和权限
- 用户、角色和权限
- oracle 用户和权限
- 数据库用户和权限
- MySQL 用户和权限
- Linux - 用户和权限
- 用户和权限管理
- mysql用户和权限
- Oracle用户和权限
- 用户,用户组和权限
- Oracle 用户和权限
- oracle 用户和权限
- oracle用户和权限
- java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
- TCL 事务控制语言
- JAVA File类操作(键人岐)
- Mysql SQL CAST()函数
- ACE主动对象模式(1)
- 用户和权限
- 运行其他脚本,加载关卡
- 如何判断一个请求是否为AJAX请求
- ioctl系统调用
- 视图
- OCP-1Z0-051-V9.02-13题
- Java虚拟机(JVM)中的内存设置详解
- 数据字典和性能视图
- ACE主动对象模式(2)