您的位置:首页 > 数据库 > Oracle

Oracle用户管理(User|Privileges|Role)

2013-04-01 17:31 344 查看
一、用户管理:

SYS/CHANGE_ON_INSTALL | SYSTEM/MANAGER | SCOTT/TIGER | SYSMAN/OEM_TEMP | INTERNAL/ORACLE

NORMAL | SYSOPER | SYSDBA → SQL> SHOW USER.

SYSOPER: STARTUP、SHUTDOWN、ALTER DATABASE MOUNT|OPEN、ALTER TABLESPACE BEGIN|END BACKUP、ALTER DATABASE BACKUP CONTROLFILE、RECOVER DATABASE、ALTER DATABASE ARCHIVELOG、RESTRICTED SESSION.

SYSDBA: SYSOPER WITH ADMIN OPTION、CREATE DATABASE、RECOVER DATABASE UNTIL.

1.USER:

SQL> CREATE/ALTER USER <User_Name> IDENTIFIED BY <Password>
DEFAULT TABLESPACE <Tablespace_Name>
TEMPORARY TABLESPACE <Tablespace_Name>
QUOTA UNLIMITED/<n> [K|M|G] ON <Tablespace_Name>
ACCOUNT LOCK/UNLOCK PROFILE <Profile_Name>;

SQL> DROP USER <User_Name> [CASCADE];

SQL> DESC DBA_USERS [ALL_USERS/USER_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)

SQL> ALTER DATABASE DEFAULT [TEMPORARY] TABLESPACE <Tablespace_Name>;

SQL> SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS';

PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------- ---------------------- ------------- ---------------------
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
MONITORING_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED

SQL> DESC DBA_PROFILES

Name Null? Type
----------------------------------------- -------- ----------------------------
PROFILE NOT NULL VARCHAR2(30)
RESOURCE_NAME NOT NULL VARCHAR2(32)
RESOURCE_TYPE VARCHAR2(8)
LIMIT VARCHAR2(40)

SQL> ALTER USER User_Name PROFILE Profile_Name;

SQL> DROP USER User_Name;

ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected
SQL> SELECT SID,SERIAL# FROM V$SESSION; → SQL> ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

--显示用户表空间配额:
SQL> SELECT tablespace_name,username,bytes,max_bytes FROM DBA_TS_QUOTAS;

SQL> SELECT * FROM V$PWDFILE_USERS; --Password_File.

USERNAME SYSDBA SYSOPER
------------------------------ ------- --------
SYS TRUE TRUE

# 远程客户端通过操作系统验证:

SQL> show parameter os_authent_prefix

NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------
os_authent_prefix string ops$

SQL> ALTER SYSETM SET REMOTE_OS_AUTHENT = TRUE scope = spfile;

SQL> CREATE USER "OPS$ORACLE" PROFILE "DEFAULT"
IDENTIFIED EXTERNALLY DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";

SQL> GRANT connect TO ops$oracle; [OS_AUTHENT_PREFIX + OS_Username(Oracle)]

2.Privileges:

System Privilege: Enables users to perform particular actions in the database.

SQL> GRANT Privilege[|Role_Name] TO User_Name[Role_Name|PUBLIC] [WITH ADMIN|GRANT OPTION];

Object Privilege: Enables users to access and manipulate a specific object.

SQL> GRANT {Object Privilege: 1.ALTER;2.EXECUTE;3.INDEX;
4.REFERENCES;5.INSERT/UPDATE/REFERENCES(Column_Name)|ALL}
ON Object_Name TO User_name;

# WITH ADMIN OPTION:
Enables the grantee to grant the system privilege or role to other users or roles.

# WITH GRANT OPTION:
Enables the grantee to grant the object privilege to other users or roles.

SQL> SELECT * FROM DBA_SYS_PRIVS; --用户/角色的系统权限(USER_SYS_PRIVS).

SQL> SELECT * FROM DBA_TAB_PRIVS; --用户的对象权限(USER_/ALL_TAB_PRIVS).

SQL> SELECT * FROM SYSTEM_PRIVILEGE_MAP; --显示所有系统权限.

SQL> SELECT * FROM SESSION_PRIVS; --显示当前会话所具有的系统权限.

SQL> SELECT * FROM USER_TAB_PRIVS_MADE; --显示用户授出的对象权限(USER_COL_PRIVS_MADE).

SQL> SELECT * FROM USER_TAB_PRIVS_RECD; --显示用户拥有的对象权限(USER_COL_PRIVS_RECD).

--显示所有对象权限:
SQL> SELECT * FROM TABLE_PRIVILEGES;

SQL> SELECT * FROM DBA_COL_PRIVS; → SQL> GRANT UPDATE(SAL) ON SCOTT.EMP TO GDCSDB;

SQL> REVOKE Privilege[|Role_Name] FROM User_Name[Role_Name|PUBLIC];

3.ROLE:

SQL> CREATE/DROP ROLE Role_Name; → SQL> GRANT Role_Name TO User_Name;

SQL> SELECT * FROM DBA_ROLES; --Oracle中的角色信息.

SQL> SELECT * FROM DBA_ROLE_PRIVS; --用户/角色所有拥有的角色(USER_ROLE_PRIVS).

SQL> SELECT * FROM ROLE_SYS_PRIVS; --显示角色所拥有的系统/对象权限(ROLE_TAB_PRIVS).

SQL> SELECT * FROM ROLE_ROLE_PRIVS; --显示角色所被赋予的其他角色.

SQL> CREATE/ALTER ROLE Role_Name [NOT IDENTIFIED|IDENTIFIED BY Password];

ERROR at line 1:
ORA-01955: DEFAULT ROLE 'ROLE_1' not granted to user
SQL> GRANT ROLE_1 TO SCOTT;

SQL> ALTER USER User_Name DEFAULT ROLE Role_Name_1[,Role_Name_2,...|ALL <EXCEPT Role_Name>|NONE];

SQL> SET ROLE Role_Name; ==> SQL> EXEC DBMS_SESSION.SET_ROLE('Role_Name INDENTIFIED BY Password');

SQL> SET ROLE Role_Name IDENTIFIED BY Password;
==> SQL> EXEC DBMS_SESSION.SET_ROLE('Role_Name');

SQL> SELECT * FROM SESSION_ROLES; | SQL> SET ROLE NONE;

DEFAULT ROLE: <1>.CREATE/ALTER ROLE ... IDENTIFIED BY Password; → NOT IDENTIFIED;<2>.GRANT Role_1,Role_2,Role_3 TO User_Name; → DEFAULT ROLE(Role_1,Only) → SET ROLE Role_2|Role_3;

# Others:

Database Schema: (1)A schema is a named collection of object.(2)A user is created,and a corresponding schema is created.(3)A user can be associated with only one schema.(4)Username and Schema are often used interchangeably.

需要注意,当初始化参数O7_DICTIONARY_ACCESSIBILITY被设置为FALSE时,除了SYSDBA和DBA用户之外,即使用户具有SELECT ANY TABLE权限,也不能访问数据字典基表和数据字典视图DBA_*。

Unlimited Tablespace(System Privilege)和With Grant Option(Object Privilege)不能授予ROLE。不能在同一条GRANT语句中同时授予System Privilege和Object Privilege。

With Admin/Grant Option → System/Object Privileges → Revoke NoCascade/Cascade.

Privileges → Roles → Users. | 预定义角色是在创建数据库时,Oracle执行如下脚本时建立的。
SQL.BSQ(CONNECT、RESOURCE、DBA、EXECUTE_CATALOG_ROLE、SELECT_CATALOG_ROLE、DELETE_CATALOG_ROLE);
CATEXP.SQL(EXP_FULL_DATABASE、IMP_FULL_DATABASE)、CATALOG.SQL(RECOVERY_CATALOG_OWNER).

EXECUTE_CATALOG_ROLE: PL/SQL Package(DBMS_*)的Execute权限;SELECT_CATALOG_ROLE: Data Dictionary(DBA_*)的SELECT权限;DELETE_CATALOG_ROLE: SYS.AUD$上的DELETE权限.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle用户管理