Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> SA_SESSION.SET_ACCESS_PROFILE does not work for PROXY connections, any idea why?
I have a situation where I need to set the OLS access profile (and
LABEL) for a user after database login and only after I verified the
user's security level from an LDAP server. The implementation work
fine for normal connections, but users that connect via a PROXY account
does not seem to inherit the rights of the proxy account even though
privileged to change the ACCESS_PROFILE.
What am I missing and what should be changed? Help is very much appreciated.
I need to use Proxy users and their credentials are locked up in a LDAP server so I need to check if they can select data only after they have been verified. So I can not define their access rights beforehand.
See below my test script that demonstrates the problem:
drop user midtiersrv cascade;
drop user secman cascade;
drop user midtieruser cascade;
--My AppServer User Also proxy user
create user midtiersrv identified by midtiersrv quota unlimited on
users;
--My Security Manager schema
create user secman identified by secman;
--My Middel Tier User
create user midtieruser identified externally;
--Setup MidTier User as user who can only connect through midtiersrv
proxy user
alter user midtieruser grant connect through midtiersrv;
grant connect to midtieruser;
grant connect to midtiersrv ;
grant connect to secman ;
grant dba to secman ; --To save time
grant unlimited tablespace to secman ;
alter user lbacsys identified by lbacsys account unlock;
connect lbacsys/lbacsys
EXEC sa_sysdba.drop_policy(policy_name => 'TEST1POL');
--Create my Policy
BEGIN
sa_sysdba.create_policy(policy_name => 'TEST1POL',
column_name => 'TEST1POL_LABEL', default_options => 'READ_CONTROL');END;
grant execute on sa_components to secman; grant execute on sa_label_admin to secman; grant execute on sa_user_admin to secman;grant execute on char_to_label to secman;
connect secman/secman
--Create levels
begin
sa_components.create_level(policy_name => 'TEST1POL', long_name => 'SECRET', short_name => 'SEC', level_num => 10); sa_components.create_level(policy_name => 'TEST1POL', long_name => 'NOTSECRET', short_name => 'NOT', level_num => 5);end;
sa_label_admin.create_label(policy_name => 'TEST1POL', label_tag => 1, label_value => 'SEC'); sa_label_admin.create_label(policy_name => 'TEST1POL', label_tag => 2, label_value => 'NOT');end;
--Authorize Users, this is where the problem comes in.S
begin
sa_user_admin.set_user_labels
(policy_name => 'TEST1POL', user_name => 'CLEARED_USER', max_read_label => 'SEC'); sa_user_admin.set_user_labels (policy_name => 'TEST1POL', user_name => 'NOTCLEARED_USER', max_read_label => 'NOT'); -- I can not set label for MIDTIERUSER since this users
create table midtiersrv.test as select rownum aid from all_objects
where rownum < 100;
grant select on midtiersrv.test to midtieruser;
--Apply pplicy for good
BEGIN
sa_policy_admin.remove_table_policy
(policy_name => 'TEST1POL', schema_name => 'MIDTIERSRV', table_name => 'TEST'); sa_policy_admin.apply_table_policy (policy_name => 'TEST1POL', schema_name => 'MIDTIERSRV', table_name => 'TEST', table_options => 'READ_CONTROL');END;
exec sa_session.set_access_profile ('TEST1POL','CLEARED_USER'); select count (*) "CLEARED Policy Set" ,
sa_session.label ('TEST1POL') SEC_LABEL from midtiersrv.test ;
exec sa_session.set_access_profile ('TEST1POL','NOTCLEARED_USER'); select count (*) "NOTCLEARED User Policy Set",
sa_session.label ('TEST1POL') SEC_LABEL from midtiersrv.test ;
create or replace package secman_pkg as
procedure set_access;
end;
/
create or replace package body secman_pkg as
procedure set_access as
v_ldap_result varchar2(100);
begin
create or replace context test_context using secman.secman_pkg;
prompt Normal Connection from MIDTIERSRV
connect midtiersrv/midtiersrv
select sys_context ('TEST_CONTEXT','SECLEVEL') Context from dual;
select count(*) "No Access Set",
sa_session.label('TEST1POL') SEC_LABEL from midtiersrv.test;
prompt Proxy Connection of MIDTIERUSER via MIDTIERSRV connect midtiersrv[midtieruser]/midtiersrv select sys_context ('TEST_CONTEXT','SECLEVEL') Context from dual; select count(*) "No Access Set",
sa_session.label('TEST1POL') SEC_LABEL from midtiersrv.test; Received on Tue Aug 01 2006 - 13:52:26 CDT
![]() |
![]() |