管理权限和角色笔记

----系统权限
ORACLE 提供了100多种系统权限。SYSTEM_PRIVILEGE_MAP
USER_SYS_PRIVIS;
收回系统权限
REVOKE SYSTEM_PRI FROM USER;
----对象权限

[@more@]

----系统权限
ORACLE 提供了100多种系统权限。SYSTEM_PRIVILEGE_MAP
USER_SYS_PRIVIS;
收回系统权限
REVOKE SYSTEM_PRI FROM USER;
----对象权限
1 授予ALTER权限
GRANT ALTER ON EMP TO TEST;
2 授予EXECUTE权限
GRANT EXECUTE ON dbms_transcation TO PUBLIC;
3 INDEX
GRANT INDEX ON EMP TO TEST;
4 REFERENCES
GRANT REFERENCES ON EMP TO TEST;
5 列权限
GRANT UPDATE(sal) ON EMP TO TEST;
6 WITH GRANT OPTION(只能被授予用户,而不能授予角色)
GRANT SELECT ON EMP TO TEST WITH GRANT OPTION;
1,显示对象权限 DBA_TAB_PRIVS
2,显示列权限 DBA_COL_PRIVS

角色
预定义角色
CONNECT
RECOURCE
DBA
建立角色
系统权限UNLIMITED TABLESPACE 和 WITH GRANT OPTION 权限不授予角色
------精细访问控制
--应用上下文
默认的USERENV 可以取得当前会话的信息。
TERMINAL
LANGUAGE
NLS_DATE_FORMAT
SESSION_USER。。。
函数SYS_CONTEXT用于取得应用上下文属性的值
SELECT SYS_CONTEXT('USERENV','TERMINAL') FROM DUAL;

-------可以自己建立应用上下文
CREATE OR REPLACE CONTEXT POSITION USING OUTDO.CTX;

CREATE OR REPLACE PACKAGE OUTDO.CTX AS
PROCEDURE SET_POSITION;
END;
/
CREATE OR REPLACE PACKAGE BODY OUTDO.CTX AS
PROCEDURE SET_POSITION IS
ID NUMBER;
BEGIN
IF SYS_CONTEXT('USERENV','SESSION_USER')='OUTDO' THEN
DBMS_SESSION.SET_CONTEXT('POSITION','NAME','小乐');
DBMS_SESSION.SET_CONTEXT('POSITION','POS','CHSI.DB_ASSISTANT');
ELSIF SYS_CONTEXT('USERENV','SESSION_USER')='MX' THEN
DBMS_SESSION.SET_CONTEXT('POSITION','NAME',小刘');
DBMS_SESSION.SET_CONTEXT('POSITION','POS','CHSI_DB_ADMIN');
ELSIF SYS_CONTEXT('USERENV','SESSION_USER')='DXL' THEN
DBMS_SESSION.SET_CONTEXT('POSITION','NAME',小段');
DBMS_SESSION.SET_CONTEXT('POSITION','POS','CHSI_DB_ASSISTANT');
ELSE
DBMS_SESSION.SET_CONTEXT('POSITION','NAME','CHSI');
DBMS_SESSION.SET_CONTEXT('POSITION','POS','CHSI');
END IF;
END;
END;
/

CREATE OR REPLACE TRIGGER LOGIN_GRIG
AFTER LOGON ON DATABASE CALL OUTDO.CTX.SET_POSITION
/

----建立触发器
CONN SYS@LAB AS DBA
CREATE OR REPLACE TRIGGER LOGIN_TRIG
AFTER LOGON ON DATABASE CALL SCOTT.SCX.SET_DEPTNO
/
----建立策略函数

----增加策略
EXECUTE DBMS_RLS.ADD_POLICY('SCOTT','EMP','EMP_POLICY','SCOTT','EMP_SECURITY.EMP_SEC','SELECT');
执行ADD_POLICY之后,会在系统默认的策略组SYS_DEFAULT中增加


-------如何将用户修改表结构的权限去掉?
可以新增字段,不可以删除与修改字段

首先建立用户 TEST,MX,OUTDO
CONN TEST@LAB
CREATE TABLE JPGINFO(
MKEY VARCHAR2(30),
PICPATH VARCHAR2(200),
PICSIZE NUMBER(10)
);
GRANT ALTER ON JPGINFO TO OUTDO;
CONN OUTDO@LAB
----建立存储
CREATE OR REPLACE PROCEDURE OUTDO.ALTER_ON_JGPINFO(COL VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE TEST.JPGINFO ADD '||COL;
END ALTER_ON_JGPINFO;
/
GRANT EXECUTE ON OUTDO.ALTER_ON_JPGINFO TO MX;
CONN MX@LAB
CONN TEST@LAB

SQL> DESC JPGINFO
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
MKEY VARCHAR2(30)
PICPATH VARCHAR2(200)
PICSIZE NUMBER(10)
TEST VARCHAR2(2)


by outdo

请使用浏览器的分享功能分享到微信等