数据库用户和权限管理

一、用户管理

1、查看当前数据库系统有哪些用户:

SYS@myh>desc dba_users;
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME				   NOT NULL VARCHAR2(30)
 USER_ID				   NOT NULL NUMBER
 PASSWORD					    VARCHAR2(30)
 ACCOUNT_STATUS 			   NOT NULL VARCHAR2(32)
 LOCK_DATE					    DATE
 EXPIRY_DATE					    DATE
 DEFAULT_TABLESPACE			   NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE			   NOT NULL VARCHAR2(30)
 CREATED				   NOT NULL DATE
 PROFILE				   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP			    VARCHAR2(30)
 EXTERNAL_NAME					    VARCHAR2(4000)
 PASSWORD_VERSIONS				    VARCHAR2(8)
 EDITIONS_ENABLED				    VARCHAR2(1)
 AUTHENTICATION_TYPE				    VARCHAR2(8)

SYS@myh>select username,user_id,account_status from dba_users;

2、创建一个新用户

SYS@myh>create user test identified by oracle;

User created.
SYS@myh>alter user test identified by oracle;   #修改密码

但是当通过此用户连接数据库时,会提示错误(没有创建会话的权限)

SYS@myh>conn test/oracle
ERROR:
ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied

3、授予用户权限,然后在连接数据库

SYS@myh>grant create session to test;

Grant succeeded.

SYS@myh>conn test/oracle
Connected.

SYS@myh>grant create session to test identified by oracle;  #创建用户并授予权限

4、用户状态(ACCOUNT_STATUS)

open expried locked

SYS@myh>alter user H account lock;    #对用户加锁
 
User altered.

SYS@myh>conn H/oralce
ERROR:
ORA-28000: the account is locked

SYS@myh>alter user H account unlock;   #解锁

User altered.

SYS@myh>alter user test password expire;   #使用户密码过期,强制修改密码

User altered.

SYS@myh>conn test/oracle    #过期用户连接数据库时,会提示输入新密码
ERROR:
ORA-28001: the password has expired


Changing password for test
New password: 
Retype new password: 
Password changed
Connected.

5、删除用户

SYS@myh>drop user test;

#当用户此用户已经创建表等实体时,删除用户需要加上 cascade
SYS@myh>drop user test;
drop user test
*
ERROR at line 1:
ORA-01922: CASCADE must be specified to drop 'TEST'


SYS@myh>drop user test cascade;

User dropped

补充:重建Scott用户:

SYS@myh>@?/rdbms/admin/utlsampl.sql;

6、查询所有连接SCOTT用户的会话:

SYS@myh>select username,sid,serial# from v$session where username='SCOTT';

USERNAME			      SID    SERIAL#
------------------------------ ---------- ----------
SCOTT				       28	  17
SCOTT				       43	 165
SCOTT				       55	  99

杀掉某个连接的会话:
SYS@myh>alter system kill session '43,165';

二、权限管理

1、系统权限

分类:

DBA:拥有全部特权,系统最高权限,只有DBA才可以创建数据库结构

resource:拥有resource权限的可以创建实体

connect:拥有connect全县的俄可以登陆Oracle,不可以创建实体。

#查看全部系统权限
SYS@myh>select distinct name from system_privilege_map order by 1;

对普通用户:授予connect和resource权限

#查看某个用户拥有的系统权限
SYS@myh>select * from dba_sys_privs where grantee='SCOTT';

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
SCOTT			       UNLIMITED TABLESPACE			NO

#赋予权限
SYS@myh>grant create view to scott;

Grant succeeded.

#撤销权限
SYS@myh>revoke create view from scott;

Revoke succeeded.


系统权限的传递:拥有级联权限的普通用户1,可以将分配权限给用户2,撤销用户1的权限,用户2的权限不会被影响。

SYS@myh>select * from dba_sys_privs where grantee='H';   #查看H用户的权限

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
H			       CREATE SESSION				NO

SYS@myh>select * from dba_sys_privs where grantee='SCOTT';   #查看SCOTT用户的权限

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
SCOTT			       UNLIMITED TABLESPACE			NO

SYS@myh>grant create view to scott;      #授予scott创建视图的权限

SYS@myh>grant create table to scott with admin option;   #以级联的方式授予scott创建表的权限

SYS@myh>select * from dba_sys_privs where grantee='SCOTT';

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
SCOTT			       CREATE VIEW				NO
SCOTT			       UNLIMITED TABLESPACE			NO
SCOTT			       CREATE TABLE				YES

SYS@myh>conn scott/oracle
Connected.

SCOTT@myh>grant create view to h;     #create view 不是级联权限,所以不能授予其他用户
grant create view to h
*
ERROR at line 1:
ORA-01031: insufficient privileges


SCOTT@myh>grant create table to h;   #将create table 授予H用户

Grant succeeded.

SCOTT@myh>conn sys/oracle as sysdba;
Connected.
SYS@myh>select * from dba_sys_privs where grantee='H';

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
H			       CREATE SESSION				NO
H			       CREATE TABLE				NO

SYS@myh>revoke create table from scott;   #收回scott的权限,发现H用户的权限没有被收回

Revoke succeeded.

SYS@myh>select * from dba_sys_privs where grantee='H';

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
H			       CREATE SESSION				NO
H			       CREATE TABLE				NO


2、对象权限

select,update,insert alter,index,delete,all(all包括全部权限)

不同的对象对象权限也不同,对象的拥有者,拥有对对象的所有权限,可以授予用户对象权限,从而操作其他用户的对象。
级联:
        拥有级联权限的用户1,可以将权限给别的用户2,撤回用户1的权限,用户2的权限也被撤回

        SYS@openlab> grant select on scott.emp to ocm with grant option;

3、角色

角色:一组权限的集合,将角色赋予某个用户,这个用户就拥有的这个角色中的所有权限。

角色分为系统生成的角色和自定义的角色。

#查看系统生成的角色
SYS@myh>select * from dba_roles;

#查看角色中包含了哪些权限
SYS@myh>select * from role_sys_privs where role='RESOURCE';

ROLE			       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
RESOURCE		       CREATE SEQUENCE				NO
RESOURCE		       CREATE TRIGGER				NO
RESOURCE		       CREATE CLUSTER				NO
RESOURCE		       CREATE PROCEDURE 			NO
RESOURCE		       CREATE TYPE				NO
RESOURCE		       CREATE OPERATOR				NO
RESOURCE		       CREATE TABLE				NO
RESOURCE		       CREATE INDEXTYPE 			NO

#创建角色
SYS@myh>create role r1;    #创建角色r1,无密码
 
Role created.

SYS@myh>create role r2 identified by oracle;   #创建r2,密码为oracle

Role created.

#授予角色权限
SYS@myh>grant create view to r1;      #将系统权限授予角色

Grant succeeded.

SYS@myh>grant select on scott.emp to r2;   #将对象权限授予角色

Grant succeeded.

SYS@myh>grant r2 to r1;    #将角色授予角色

Grant succeeded.

#查看角色拥有的权限
SYS@myh>select * from role_sys_privs where role='R1';

ROLE			       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
R1			       CREATE VIEW				NO


#赋予角色:
SYS@openlab> grant r1,r2 to xian;         #r1,r2都没有密码,r1生效;一个有密码,有密码的生效;都有密码,都生效

#给角色设置密码
SYS@myh>set role r1 identified by oracle;

Role set.

#删除角色
SYS@myh>drop role r1;

Role dropped.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值