Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Roles
CONNECT SYS/PASS AS SYSDBA
DROP ROLE SAM_BASE; DROP ROLE SAM_SECURITY; DROP ROLE SAM_USER; DROP ROLE SAM_ADMIN;
QUOTA UNLIMITED ON sams_audit QUOTA UNLIMITED ON sams_indx QUOTA UNLIMITED ON sams_interface QUOTA UNLIMITED ON sams_lob QUOTA UNLIMITED ON sams_tabs
GRANT ALTER USER TO SAM WITH ADMIN OPTION; GRANT CREATE SESSION TO SAM WITH ADMIN OPTION; GRANT CREATE TABLE TO SAM; GRANT CREATE PROCEDURE TO SAM; GRANT CREATE VIEW TO SAM; GRANT SELECT ON SYS.DBA_ROLE_PRIVS TO SAM WITH GRANT OPTION; GRANT SELECT ON SYS.DBA_USERS TO SAM; GRANT SELECT ON SYS.V_$INSTANCE TO SAM; GRANT SELECT ON SYS.V_$PARAMETER TO SAM; GRANT SELECT ON SYS.V_$SESSION TO SAM;DROP TABLE SAM.SAM_ROLES;
MODULE_ID VARCHAR2(2), PASSWORD VARCHAR2(30) NOT NULL, ROLE VARCHAR2(30) NOT NULL, VISIBLE_IND VARCHAR2(1) DEFAULT 'N' NOT NULL
(module_id, password, role, visible_ind)
Values
('SM', 'ADMIN4', 'SAM_ADMIN', 'N');
Insert into SAM.SAM_ROLES
(module_id, password, role, visible_ind)
Values
(NULL, 'USER2', 'SAM_USER', 'N');
Insert into SAM.SAM_ROLES
(module_id, password, role, visible_ind)
Values
(NULL, 'SECURITY2', 'SAM_SECURITY', 'N');
CREATE ROLE SAM_BASE; CREATE ROLE SAM_SECURITY IDENTIFIED BY SECURITY2; CREATE ROLE SAM_USER IDENTIFIED BY USER3; CREATE ROLE SAM_ADMIN IDENTIFIED BY ADMIN4; GRANT SAM_BASE TO SAM WITH ADMIN OPTION;GRANT SAM_SECURITY TO SAM WITH ADMIN OPTION; GRANT SAM_ADMIN TO SAM WITH ADMIN OPTION; ALTER USER SAM DEFAULT ROLE SAM_BASE, SAM_SECURITY, SAM_ADMIN; CREATE OR REPLACE FORCE VIEW SAM.SM_SAM_USER_SECURITY_VW (ROLE, PASSWORD, MODULE_ID, SECURITY_LEVEL, VISIBLE_IND) AS
uname IN VARCHAR2,
rname IN VARCHAR2 );
PROCEDURE enableUser (
uname IN VARCHAR2 );
END SAM_ADMIN_LIB;
/
CREATE OR REPLACE PACKAGE BODY SAM.SAM_ADMIN_LIB IS
admin_role CONSTANT VARCHAR2(10) := 'SAM_ADMIN'; default_roles CONSTANT VARCHAR2(100) := 'SAM_BASE, SAM_SECURITY'; user_role CONSTANT VARCHAR2(10) := 'SAM_USER'; InvalidUser EXCEPTION; InvalidAccessLevel EXCEPTION; NoRole EXCEPTION; PRAGMA EXCEPTION_INIT (NoRole, -1951);
PROCEDURE grantRole (
uname IN VARCHAR2,
rname IN VARCHAR2)
IS
invalid_role EXCEPTION;
cnt NUMBER;
BEGIN
EXECUTE IMMEDIATE
'GRANT '||rname||' TO "'||uname||'"';
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20000, SQLERRM);
END;
PROCEDURE enableUser (
uname IN VARCHAR2)
IS
BEGIN
/********************************************************************************
********************************************************************************/ PROCEDURE append ( string IN OUT VARCHAR2, role_nm IN VARCHAR2, role_pw IN VARCHAR2) IS id_str CONSTANT VARCHAR2(30) := ' IDENTIFIED BY '; BEGIN string := string || role_nm || id_str || role_pw;END;
FETCH rp_cur INTO rp_rec; EXIT WHEN rp_cur%NOTFOUND; IF (rp_cur%rowCount > 1) THEN role_str := role_str || ', '; END IF; append (role_str, rp_rec.role, rp_rec.password);END LOOP;
RAISE ex_no_role;
END IF;
DBMS_OUTPUT.PUT_LINE(role_str);
dbms_session.set_role (role_str);
EXCEPTION
WHEN ex_no_role THEN
RAISE_APPLICATION_ERROR (-20000, nr_str); WHEN OTHERS THEN
IF (rp_cur%isOpen) THEN CLOSE rp_cur; END IF; dbms_session.set_role (dr_str); RAISE_APPLICATION_ERROR (-20000, SQLERRM);END;
module_code IN VARCHAR2,
role_password IN VARCHAR2,
work_station IN VARCHAR2)
RETURN NUMBER
IS
atxt_str CONSTANT VARCHAR2(5) := 'LOGIN';
atyp_str CONSTANT VARCHAR2(1) := 'X';
BEGIN
enableUserRoles (role_password);
--sams.sams_audit.setModule (UPPER(module_code), work_station);
--sams.sams_audit.setAction (atxt_str, atyp_str, work_station);
COMMIT;
RETURN 0;
END;
END SAM_USER_LIB;
/
SHOW ERRORS
CONNECT SAM/SAM@
GRANT EXECUTE ON SAM.SAM_ADMIN_LIB TO SAM_ADMIN; GRANT EXECUTE ON SAM.SAM_USER_LIB TO SAM_BASE; GRANT SELECT ON SAM.SM_SAM_USER_SECURITY_VWTO SAM_SECURITY;
This shows you can set a role in a package. My issue was that when I import SAM I drop and cascade first. Then issue a create user sam statement then use import. That limits all the creation errors and ensures the old schema is gone.
Well after doing this and recreating the users that were captured during the export the users could not login. It was because sam did not have admin privs. Received on Wed Feb 23 2005 - 13:59:31 CST
![]() |
![]() |