ویژگی Schema Only Accounts در اوراکل 18c و 19c

در نسخه های ماقبل اوراکل 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.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.