در نسخه های ماقبل اوراکل 18c، ایجاد یک user تنها با تعیین متد AUTHENTICATION آن امکان پذیر است و به صورت کلی، در این نسخه ها(12c,11g,10g)، سه متد AUTHENTICATION برای کاربران وجود دارد:
Password: create user usef1 identified by password;
External: create user usef2 identified externally;
Global: create user usef3 identified globally;
در صورت استفاده از متد Password، شکل hash شده پسورد کاربر در جدولی از بانک ذخیره شده(جدول $user) و در دو حالت دیگر(External – Global)، پسوردی از کاربر در دیتابیس ذخیره نخواهد شد و AUTHENTICATION خارج از دیتابیس انجام می شود.
اوراکل 18c با ارائه یک قابلیت جدید، امکان ساخت user را بدون تعیین متد AUTHENTICATION فراهم کرد که استفاده از این قابلیت، منتج به عدم امکان لاگین مستقیم به این نوع از کاربران خواهد شد.
به عبارتی دیگر، این قابلیت می تواند امکان لاگین مستقیم به application schemaها را به دلایل حساسیت های امنیتی و همچنین دسترسی سطح بالایی که دارند، از بین ببرد البته انجام این کار، تنها به زمان ساخت کاربر محدود نیست و برای کاربری که قبلا ایجاد شده هم می توان این قابلیت را فعال نمود(با کمک دستور alter user).
برای مثال، با دستور زیر، کاربر usef_schema بدون تعیین متد AUTHENTICATION ایجاد خواهد شد:
SQL> CREATE USER usef_schema NO AUTHENTICATION;
User created.
در این حالت، امکان لاگین مستقیم برای کاربر usef_schema از بین خواهد رفت و پسوردی از این کاربر، در جدول $user ذخیره نخواهد شد:
SQL> conn usef_schema
ORA-01017: invalid username/password; logon denied
SQL> conn usef_schema
ORA-01005: null password given; logon denied
SQL> select name,password from user$ where name like ‘%USEF%’;
همچنین برای این نوع از کاربران، فیلد AUTHENTICATION_TYPE در ویوی dba_users برابر با NONE خواهد بود:
SQL> select USERNAME,AUTHENTICATION_TYPE from dba_users where USERNAME=’USEF_SCHEMA’;
اهدای privilege و role به این نوع از کاربران، همانند کاربران دیگر قابل انجام است:
SQL> grant connect,resource to usef_schema;
Grant succeeded.
SQL> alter user usef_schema quota unlimited on users;
User altered.
SQL> alter user usef_schema default tablespace users;
User altered.
با اهدای این مجوزها، می توان از طریق کاربران دارای مجوز، برای این کاربر اشیایی را ایجاد نمود و یا اشیاهای این کاربر را مدیریت کرد:
SQL> grant connect,unlimited tablespace,create any table,select any table to usef;
Grant succeeded.
SQL> conn usef/a
Connected.
SQL> create table usef_schema.mytbl as select * from dual;
Table created.
کاربر usef به دلیل نداشتن مجوزم لازم، امکان حذف جدولی که برای usef_schema ایجاد کرده است را ندارد:
SQL> drop table usef_schema.mytbl;
ORA-01031: insufficient privileges
دستور زیر، لیست objectهای کاربر USEF_SCHEMA را نمایش خواهد داد:
SQL> select owner,object_name,object_type from dba_objects p where p.owner=’USEF_SCHEMA’;
در صورت استفاده از ویژگی Schema Only Accounts، می توان از طریق proxy connection به این نوع schema متصل شد این کار با اهدای proxy authentication به یک کاربر، قابل انجام خواهد بود.
برای مثال، با اجرای دستور زیر، می توان از طریق کاربر usef به اسکیمای usef_schema متصل شد:
SQL> ALTER USER usef_schema GRANT CONNECT THROUGH usef;
User altered.
اتصال به هر دو صورت local و remote قابل انجام است:
–local
SQL> CONN usef[usef_schema]/a
Connected.
–remote
SQL> CONN usef[usef_schema]/a@//10.32.136.2:1521/noncdb
Connected.
با اجرای دستور show user و با کمک USERENV app context، خواهیم دید که به اسکیمای usef_schema متصل شده ایم:
SQL> show user
USER is “USEF_SCHEMA”
SQL> select sys_context(‘USERENV’,’SESSION_USER’) as session_user,sys_context(‘USERENV’,’SESSION_SCHEMA’) as session_schema, sys_context(‘USERENV’,’PROXY_USER’) as proxy from dual;
SESSION_USER SESSION_SCHEMA PROXY
————— ————— ———-
USEF_SCHEMA USEF_SCHEMA USEF
قبلا مشاهده کردید که کاربر usef به دلیل نداشتن مجوز لازم، نتوانست جدول mytbl را حذف کند، مجددا دستور حذف این جدول را در شرایط جدید اجرا می کنیم:
SQL> drop table usef_schema.mytbl;
Table dropped.
همانطور که می بینید، جدول mytbl حذف شده است.
مجوز proxy authentication را می توان به کاربران متعددی اهدا نمود برای مثال، با دستور زیر، این مجوز را به کاربر nima هم می دهیم:
SQL> ALTER USER usef_schema GRANT CONNECT THROUGH nima;
User altered.
پرسش! اگر کاربر nima بعد از اتصال به usef_schema، تغییری را انجام دهد، در auditing قابل تشخیص است؟
پاسخ مثبت است. مثال زیر را ببینید.
مثال: در ابتدا audit policyای با نام mypol1 را ایجاد می کنیم:
SQL> create audit policy mypol1 roles dba;
Audit policy created.
audit policy ایجاد شده را برای کاربر usef_schema فعال می کنیم:
SQL> audit policy mypol1 by usef_schema;
Audit succeeded.
با کمک کاربر nima، به اسکیمای usef_schema متصل شده و جدولی را حذف و ایجاد می کنیم:
SQL> conn nima[usef_schema]/a
Connected.
SQL> drop table mytbl;
Table dropped.
SQL> create table mytbl as select name from v$datafile;
Table created.
با مراجعه به ویوی unified_audit_trail، خواهیم دید در ستون DBPROXY_USERNAME، اسم کاربر nima هم قابل مشاهده است:
SQL> select p.dbusername,p.dbproxy_username,p.action_name,p.event_timestamp,p.sql_text from unified_audit_trail p where p.unified_audit_policies=’MYPOL1′;
نکته: برای مشاهده لیست proxy userها، می توان از ویوی proxy_users استفاده کرد:
SQL> select * from proxy_users where client=’USEF_SCHEMA’;
PROXY CLIENT AUT FLAGS
————— ————— — ———————————–
USEF USEF_SCHEMA NO PROXY MAY ACTIVATE ALL CLIENT ROLES
NIMA USEF_SCHEMA NO PROXY MAY ACTIVATE ALL CLIENT ROLES
در اوراکل 18c، امکان اهدای Administrative privilegeها اعم از sysdba و sysoper و … به کاربران از نوع Schema Only Accounts وجود ندارد:
SQL> grant sysdba to USEF_SCHEMA;
ORA-40366: Administrative privilege cannot be granted to this user.
به عنوان یک قابلیت جدید در اوراکل 19c، می توان این نوع از مجوزها(admin privilegeها) را به Schema Only Accounts اهدا کرد:
[oracle@ol7 ~]$ sqlplus “/as sysdba”
SQL*Plus: Release 19.0.0.0.0 – Production on Fri Apr 5 02:52:25 2019
Version 19.2.0.0.0
SQL> CREATE USER usef_schema NO AUTHENTICATION;
User created.
SQL> grant sysdba to USEF_SCHEMA;
Grant succeeded.
بعد از ایجاد یک کاربر، می توان متد AUTHENTICATION آن را تغییر داد و یا در صورتی که کاربر از نوع Schema Only Accounts است، برای آن متد AUTHENTICATIONای تعریف نمود این کار به راحتی و با کمک دستور alter user قابل انجام است.
برای مثال، با دستور زیر، usef_schema، از حالت Schema Only Accounts خارج خواهد شد:
SQL> alter user USEF_SCHEMA identified by a;
User altered.
SQL> conn usef_schema/a
Connected.
SQL> select USERNAME,AUTHENTICATION_TYPE from dba_users where USERNAME=’USEF_SCHEMA’;
USERNAME AUTHENTI
————— ——–
USEF_SCHEMA PASSWORD
همچنین می توان با کمک دستور alter user، کاربری که متد AUTHENTICATION مشخصی دارد را به حالت Schema Only Accounts درآورد:
SQL> alter user usef no AUTHENTICATION;
User altered.
ممنون. خیلی مفید بود