用户认证方式:
sysdba
1、密码文件认证
将用户名和密码放在密码文件中,密码文件在 $ORACLE_HOME/dbs/orapw${ORACLE_SID}
如果忘记密码可能过重置密码文件的方式来获得
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} entries=5
password=oracledb11g
2、操作系统认证
操作系统认证的前提:
$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(all) --此处括号中不能为 none
sysdba 的认证不会放到,数据库中
普通用户的验证方式:
普通用户的验证方式怎么样,主要取决于创建该用户时,如何指定,主要的认证方式有:
密码认证
SQL> create user 用户名 identified by 密码;
外部认证
SQL> create user 用户名 identified by externally;
全局认证
SQL> create user 用户名 identified GLOBALLY ......;
创建用户:
CREATE USER user_name
IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS external_name}
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE tablespace_name]
[QUOTA ... ON tablespace_name]
[ACCOUNT {LOCK|UNLOCK}]
例:创建一个密码认证的用户
SQL> create user abc identified by abc;
例:创建一个外部认证的用户
1、查看外部认证用户前辍
SQL> show parameter os_authent_prefix
2、在操作系统上创建用户
[root@t183 ~]# useradd hh
[root@t183 ~]# echo "hh" | passwd hh --stdin
[root@t183 ~]# su - hh
[hh@t183 ~]$ vim .bash_profile --把ORACLE用户的环境变量拷过来
3、创建ORACLE外部认证用户
用户名为:
前辍 + 操作系统用户名
SQL> create user ops$hh identified EXTERNALLY;
4、登录
[root@t183 ~]# su - hh
[hh@t183 ~]$ sqlplus /
修改用户属性
修改密码
ALTER USER user_name identified by ....
修改用户的默认表空间、临时表空间
修改密码的另一种方式(密码还原,适合于11g之前):
1、把原来的密码查出来
SQL> select USERNAME,PASSWORD from dba_users;
scott fkflkkslkalkjhghjgs
2、修改密码
alter user scott identified by abc
connect scott/abc
3、登录后,还原密码
alter user scott identified by values 'fkflkkslkalkjhghjgs'
与用户相的数据字典:
dba_users
用户建好后是没什么权限的,所以用户要用,还必须授予相应的权限,权限在ORACLE中分为
两种类型:系统权限、对象权限。
系统权限:
对所有对象都适用
对象权限:
针对一个特定对象上的
系统权限的授予:
grant 权限名 to 用户名|角色名|public [with admin option]
with admin option: 把权限授予用户的同时,该用户又可把这个权限授予另外的用户
注:如果是授予管理员sysdba的话,登录时要加 as sysdba,另登录以后,sysdba 统一显示的sys
系统权限的回收:
revoke 权限名 from 用户名|角色名|public
系统权限的回收不会级连
如果不知道权限怎么写的话,可以查看数据字典:
SYS> select * from system_privilege_map;
例:
SYS> grant create tablespace to scott with admin option;
查看用户的系统权限:
1、用户自己
SCOTT> select * from session_privs;
2、管理员
SYS> select * from dba_sys_privs where GRANTEE='SCOTT'; --看直接授予的权限
SYS> select * from dba_role_privs where grantee='SCOTT'; --看授予了哪些角色
SYS> SELECT * FROM role_sys_privs where role in (select GRANTED_ROLE
2 from dba_role_privs where grantee='SCOTT'); --看角色授予了哪些权限
对象权限授予
GRANT 权限名 ON 对象名[(列名)] TO 用户名|角色名|PUBLIC WITH GRANT OPTION
常用的对象限权
对象限权 表 视图 序列 过程
修改(alter) * *
删除(delete) * *
执行(execute) *
索引(index) *
插入(insert) * *
关联(refreences) * *
选择(select) * * *
更新(update) * *
例:让abc 能查看scott的dept表
SCOTT> grant select on dept to abc;
例:让abc能修改scott.emp
SYS> grant update on scott.emp to abc;
SYS> grant update(deptno) on scott.emp to abc; --限制到列
对象权限回收:
revoke 权限名 ON 对象名 from 用户名|角色名|public
对象权限的回收会级连
对象权限的查看:
1、用户自己
SCOTT> select * from user_tab_privs;
2、管理员
SYS> select grantee,owner,table_name,GRANTOR,PRIVILEGE
from dba_tab_privs where GRANTEE='SCOTT'; --直接授予的对象权限
SYS> select * from dba_role_privs where GRANTEE='SCOTT'; --查看用户授予了哪些角色
SYS> select * from role_tab_privs where ROLE in (select GRANTED_ROLE
2 from dba_role_privs where GRANTEE='SCOTT');
与权限相关的数据字典:
dba_sys_privs 直接授予的系统权限
dba_tab_privs 直接授予的对象权限
dba_role_privs 用户角色
role_sys_privs 角色拥有的系统权限
role_tab_privs 角色拥有的对象权限
dba_col_privs 用户对某个列的对象权限
user_tab_privs_recd 用户拥有的对象权限(接收到的)
user_tab_privs_made 用户授出去的对象权限
角色
角色实际是权限的打包,角色授权要注意的是,不能授予自己,另也不能循环授予
创建角色:
CREATE ROLE role_name
[NOT IDENTIFIED | IDENTIFIED BY password |IDENTIFIED EXTERNALLY]
例:创建一个不要密码的角色
SYS> CREATE ROLE r1;
SYS> CREATE ROLE r2 NOT IDENTIFIED;
例:创建一个要密码认证的角色
SYS> CREATE ROLE r3 IDENTIFIED BY r3;
角色授权:
系统权限:
grant 权限名 to 角色名
对象权限:
grant 权限名 ON 对象名 to 角色名
SYS> grant create session to r1;
SYS> grant create session to r2;
SYS> grant create session to r3;
SYS> grant create view to r2;
SYS> grant create table to r3;
把角色授予用户
GRANT 角色名 TO 用户名
SYS> grant r2,r3 to abc;
默认角色:
默认角色即默认就开启的角色
SYS> alter user abc default role r1,r2,r3;
激活角色:
激活角色常用于那些设置默认角色或者角色设置密码时,在这种情况下,虽然用户有两个角色的
权限,但是暂时关闭的,需要手工来激活他
ABC> set role all;
ABC> set role r1,r2,r3 identified by r3;
要暂时关闭一些角色,就不要把角色放到激活清单中
角色删除:
DROP ROLE role_name
查看角色的权限:
role_sys_privs
role_tab_privs
系统也预定义了两个角色
connect
resource
权限管理的一些建议:
1、在不影响用户工作的前提下,尽可能权限最小化
2、O7_DICTIONARY_ACCESSIBILITY 如果设置为 true
那有 select any table 权限的用户可以访问数据字典和v$... 视图
这样的话,是不应该的
3、尽可能不要授予带 any 的权限给用户
sysdba
1、密码文件认证
将用户名和密码放在密码文件中,密码文件在 $ORACLE_HOME/dbs/orapw${ORACLE_SID}
如果忘记密码可能过重置密码文件的方式来获得
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} entries=5
password=oracledb11g
2、操作系统认证
操作系统认证的前提:
$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(all) --此处括号中不能为 none
sysdba 的认证不会放到,数据库中
普通用户的验证方式:
普通用户的验证方式怎么样,主要取决于创建该用户时,如何指定,主要的认证方式有:
密码认证
SQL> create user 用户名 identified by 密码;
外部认证
SQL> create user 用户名 identified by externally;
全局认证
SQL> create user 用户名 identified GLOBALLY ......;
创建用户:
CREATE USER user_name
IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS external_name}
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE tablespace_name]
[QUOTA ... ON tablespace_name]
[ACCOUNT {LOCK|UNLOCK}]
例:创建一个密码认证的用户
SQL> create user abc identified by abc;
例:创建一个外部认证的用户
1、查看外部认证用户前辍
SQL> show parameter os_authent_prefix
2、在操作系统上创建用户
[root@t183 ~]# useradd hh
[root@t183 ~]# echo "hh" | passwd hh --stdin
[root@t183 ~]# su - hh
[hh@t183 ~]$ vim .bash_profile --把ORACLE用户的环境变量拷过来
3、创建ORACLE外部认证用户
用户名为:
前辍 + 操作系统用户名
SQL> create user ops$hh identified EXTERNALLY;
4、登录
[root@t183 ~]# su - hh
[hh@t183 ~]$ sqlplus /
修改用户属性
修改密码
ALTER USER user_name identified by ....
修改用户的默认表空间、临时表空间
修改密码的另一种方式(密码还原,适合于11g之前):
1、把原来的密码查出来
SQL> select USERNAME,PASSWORD from dba_users;
scott fkflkkslkalkjhghjgs
2、修改密码
alter user scott identified by abc
connect scott/abc
3、登录后,还原密码
alter user scott identified by values 'fkflkkslkalkjhghjgs'
与用户相的数据字典:
dba_users
用户建好后是没什么权限的,所以用户要用,还必须授予相应的权限,权限在ORACLE中分为
两种类型:系统权限、对象权限。
系统权限:
对所有对象都适用
对象权限:
针对一个特定对象上的
系统权限的授予:
grant 权限名 to 用户名|角色名|public [with admin option]
with admin option: 把权限授予用户的同时,该用户又可把这个权限授予另外的用户
注:如果是授予管理员sysdba的话,登录时要加 as sysdba,另登录以后,sysdba 统一显示的sys
系统权限的回收:
revoke 权限名 from 用户名|角色名|public
系统权限的回收不会级连
如果不知道权限怎么写的话,可以查看数据字典:
SYS> select * from system_privilege_map;
例:
SYS> grant create tablespace to scott with admin option;
查看用户的系统权限:
1、用户自己
SCOTT> select * from session_privs;
2、管理员
SYS> select * from dba_sys_privs where GRANTEE='SCOTT'; --看直接授予的权限
SYS> select * from dba_role_privs where grantee='SCOTT'; --看授予了哪些角色
SYS> SELECT * FROM role_sys_privs where role in (select GRANTED_ROLE
2 from dba_role_privs where grantee='SCOTT'); --看角色授予了哪些权限
对象权限授予
GRANT 权限名 ON 对象名[(列名)] TO 用户名|角色名|PUBLIC WITH GRANT OPTION
常用的对象限权
对象限权 表 视图 序列 过程
修改(alter) * *
删除(delete) * *
执行(execute) *
索引(index) *
插入(insert) * *
关联(refreences) * *
选择(select) * * *
更新(update) * *
例:让abc 能查看scott的dept表
SCOTT> grant select on dept to abc;
例:让abc能修改scott.emp
SYS> grant update on scott.emp to abc;
SYS> grant update(deptno) on scott.emp to abc; --限制到列
对象权限回收:
revoke 权限名 ON 对象名 from 用户名|角色名|public
对象权限的回收会级连
对象权限的查看:
1、用户自己
SCOTT> select * from user_tab_privs;
2、管理员
SYS> select grantee,owner,table_name,GRANTOR,PRIVILEGE
from dba_tab_privs where GRANTEE='SCOTT'; --直接授予的对象权限
SYS> select * from dba_role_privs where GRANTEE='SCOTT'; --查看用户授予了哪些角色
SYS> select * from role_tab_privs where ROLE in (select GRANTED_ROLE
2 from dba_role_privs where GRANTEE='SCOTT');
与权限相关的数据字典:
dba_sys_privs 直接授予的系统权限
dba_tab_privs 直接授予的对象权限
dba_role_privs 用户角色
role_sys_privs 角色拥有的系统权限
role_tab_privs 角色拥有的对象权限
dba_col_privs 用户对某个列的对象权限
user_tab_privs_recd 用户拥有的对象权限(接收到的)
user_tab_privs_made 用户授出去的对象权限
角色
角色实际是权限的打包,角色授权要注意的是,不能授予自己,另也不能循环授予
创建角色:
CREATE ROLE role_name
[NOT IDENTIFIED | IDENTIFIED BY password |IDENTIFIED EXTERNALLY]
例:创建一个不要密码的角色
SYS> CREATE ROLE r1;
SYS> CREATE ROLE r2 NOT IDENTIFIED;
例:创建一个要密码认证的角色
SYS> CREATE ROLE r3 IDENTIFIED BY r3;
角色授权:
系统权限:
grant 权限名 to 角色名
对象权限:
grant 权限名 ON 对象名 to 角色名
SYS> grant create session to r1;
SYS> grant create session to r2;
SYS> grant create session to r3;
SYS> grant create view to r2;
SYS> grant create table to r3;
把角色授予用户
GRANT 角色名 TO 用户名
SYS> grant r2,r3 to abc;
默认角色:
默认角色即默认就开启的角色
SYS> alter user abc default role r1,r2,r3;
激活角色:
激活角色常用于那些设置默认角色或者角色设置密码时,在这种情况下,虽然用户有两个角色的
权限,但是暂时关闭的,需要手工来激活他
ABC> set role all;
ABC> set role r1,r2,r3 identified by r3;
要暂时关闭一些角色,就不要把角色放到激活清单中
角色删除:
DROP ROLE role_name
查看角色的权限:
role_sys_privs
role_tab_privs
系统也预定义了两个角色
connect
resource
权限管理的一些建议:
1、在不影响用户工作的前提下,尽可能权限最小化
2、O7_DICTIONARY_ACCESSIBILITY 如果设置为 true
那有 select any table 权限的用户可以访问数据字典和v$... 视图
这样的话,是不应该的
3、尽可能不要授予带 any 的权限给用户
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755796/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21175589/viewspace-755796/