角色可以直接授权,可以建立密码验证角色,也可以通过过程来验证角色。
这里给出一个最简单的通过过程来验证角色的例子:
SQL> CREATE ROLE R_PROCEDURE IDENTIFIED USING P_AUDIT_ROLE;
角色已创建。
SQL> CREATE OR REPLACE PROCEDURE P_AUDIT_ROLE
2 AUTHID CURRENT_USER AS
3 BEGIN
4 IF SYS_CONTEXT('userenv', 'ip_address') = '172.25.198.230' THEN
5 EXECUTE IMMEDIATE 'SET ROLE R_PROCEDURE';
6 END IF;
7 END;
8 /
过程已创建。
SQL> GRANT SELECT ANY TABLE TO R_PROCEDURE;
授权成功。
SQL> GRANT EXECUTE ON P_AUDIT_ROLE TO TEST;
授权成功。
SQL> CONN TEST/TEST
已连接。
SQL> SELECT * FROM SESSION_ROLES;
ROLE
------------------------------
R_TEST
PLUSTRACE
SQL> EXEC YANGTK.P_AUDIT_ROLE
PL/SQL 过程已成功完成。
SQL> SELECT * FROM SESSION_ROLES;
ROLE
------------------------------
R_TEST
PLUSTRACE
SQL> CONN TEST/TEST@172.25.198.230/TEST112
已连接。
SQL> SELECT * FROM SESSION_ROLES;
ROLE
------------------------------
R_TEST
PLUSTRACE
SQL> EXEC YANGTK.P_AUDIT_ROLE
PL/SQL 过程已成功完成。
SQL> SELECT * FROM SESSION_ROLES;
ROLE
------------------------------
R_PROCEDURE
本机不带服务名登陆,不走TCP/IP协议,因此无法获取到IP地址,而通过服务名登陆数据库后,可以通过过程的验证,因此ROLE被启用。
验证角色的过程可以是单独的过程,也可以是包中的过程。不过这种角色不能直接被授权,只能通过调用过程还完成角色的启用。
SQL> GRANT R_PROCEDURE TO TEST;
授权成功。
SQL> CONN TEST/TEST
已连接。
SQL> SELECT * FROM SESSION_ROLES;
ROLE
------------------------------
R_TEST
PLUSTRACE
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-676052/ ,如需转载,请注明出处,否则将追究法律责任。