معرفی Role جدید برای Developerها در اوراکل 23c

زمانی که ادمین دیتابیس، User جدیدی را برای Developerها ایجاد می کند شاید در تردید باشد که چه مجوزهایی را به این User اهدا کند تا Developer حداقل دسترسی لازم برای تولید Application را در نقطه شروع داشته باشد.

شاید بسیاری از ادمینها، Roleهای Connect و Resource را به این User اهدا می کنند تا Developer بتواند از طریق این User به دیتابیس وصل شده و در صورت لزوم اقداماتی را نظیر ساخت Table، View، Trigger و … انجام دهد.

این دو Role شامل system privilegeهای زیر هستند:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> create user usef identified by a;
User created.
SQL> grant connect,resource to usef;
Grant succeeded.
SQL> conn usef/a@target:1521/PDBTARGET
Connected.
SQL> select * from session_privs;
CREATE SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
SET CONTAINER
10 rows selected.  

البته در اوراکل 12c برای نقش Resource تغییر مهمی اتفاق افتاد، که آن هم گرفتن دسترسی Unlimited Tablespace از این نقش بود با این تغییر، کاربری که صرفا دارای مجوز resource باشد نمی تواند segmentای را ایجاد کند. همچنین در این نسخه و با آمدن containerها، مجوز set container هم به connect اضافه شد که البته برای Local Userها کاربردی ندارد.

در نسخه های بعدی و تا قبل از 23c تغییر خاصی در تعداد مجوزهای این دو Role ایجاد نشد ولی در 23c تعداد مجوزهای نقش resource از 8 به 17 افزایش پیدا کرده است:

Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
SQL> create user usef identified by a;
User created.
SQL> grant connect,resource to usef;
Grant succeeded.
SQL> connect usef/a@target:1521/pdb1
Connected.
SQL> select * from session_privs;
CREATE PROPERTY GRAPH
CREATE ANALYTIC VIEW
CREATE HIERARCHY
CREATE ATTRIBUTE DIMENSION
SET CONTAINER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE TYPE
CREATE MATERIALIZED VIEW
CREATE TRIGGER
CREATE PROCEDURE
CREATE SEQUENCE
CREATE VIEW
CREATE SYNONYM
CREATE CLUSTER
CREATE TABLE
CREATE SESSION
17 rows selected.

در نسخه 23c، اوراکل Role جدیدی به نام DB_DEVELOPER_ROLE را معرفی کرده است که می تواند جایگزین مناسبی برای connect و resource باشد چرا که DB_DEVELOPER_ROLE مجوزهای مهم این دو Role را دارد و می تواند برای شروع کار Developerها مناسب باشد.

اگر DB_DEVELOPER_ROLE را به کاربری اهدا کنیم، کاربر دارای system privilegeهای زیر خواهد بود:

SQL> create user usef identified by a;
User created.
SQL> grant DB_DEVELOPER_ROLE to usef;
Grant succeeded.
SQL> connect usef/a@target:1521/pdb1
Connected.
SQL> select * from session_privs;
CREATE DOMAIN
CREATE MLE
CREATE ANALYTIC VIEW
CREATE HIERARCHY
CREATE ATTRIBUTE DIMENSION
EXECUTE DYNAMIC MLE
CREATE CUBE BUILD PROCESS
CREATE CUBE
CREATE CUBE DIMENSION
CREATE MINING MODEL
CREATE JOB
DEBUG CONNECT SESSION
ON COMMIT REFRESH
CREATE DIMENSION
CREATE TYPE
CREATE MATERIALIZED VIEW
CREATE TRIGGER
CREATE PROCEDURE
FORCE TRANSACTION
CREATE SEQUENCE
CREATE VIEW
CREATE SYNONYM
CREATE TABLE
CREATE SESSION
24 rows selected.

همچنین Roleها و object privilegeهای زیر هم به این کاربر اهدا خواهند شد:

SQL> SELECT * FROM DBA_ROLE_PRIVS n WHERE n.grantee=’DB_DEVELOPER_ROLE’;

SQL> SELECT * FROM DBA_TAB_PRIVS WHERE grantee=’DB_DEVELOPER_ROLE’;

البته ایجاد segment کماکان نیاز به دستور جدایی دارد که می تواند از طریق alter user quota و یا unlimited tablespace به کاربران اهدا شود.

SQL> create table tb as select * from dual;
ORA-01950: The object owner 'USEF' has insufficient quota on tablespace 'SYSTEM'.

امکان کم کردن مجوزهای فوق از DB_DEVELOPER_ROLE در سطح یک PDB وجود ندارد و برای سلب مجوزی از این ROLE باید به root container متصل شد:

SQL> show con_name
CON_NAME
------------------
TEHRANPDB
SQL> revoke CREATE VIEW from DB_DEVELOPER_ROLE;
ORA-65092: system privilege granted with a different scope to 'DB_DEVELOPER_ROLE'
SQL> show con_name
CON_NAME
-----------------
CDB$ROOT
SQL>  revoke CREATE VIEW from DB_DEVELOPER_ROLE container=all;
Revoke succeeded.

صرف نظر از مجوزهای فوق، در سطح PDB می توان به این ROLE مجوز جدیدی را اهدا کرد و در صورت لزوم این مجوز جدید را revoke کرد:

SQL> show con_name
CON_NAME
------------------
TEHRANPDB
SQL> grant select any table to DB_DEVELOPER_ROLE;
Grant succeeded.
SQL> SELECT PRIVILEGE FROM DBA_SYS_PRIVS WHERE grantee='DB_DEVELOPER_ROLE' and PRIVILEGE like 'SELECT%';
PRIVILEGE
--------------------
SELECT ANY TABLE
SQL> revoke SELECT ANY TABLE from DB_DEVELOPER_ROLE;
Revoke succeeded.

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *