কোনও ব্যবহারকারী প্রাপ্ত সমস্ত অনুদানের তালিকা কীভাবে করব?


99

আমাকে ওরাকল ডিবিতে সমস্ত অনুদান দেখতে হবে।

আমি স্কোমাদের তুলনা করতে টোড বৈশিষ্ট্যটি ব্যবহার করেছি তবে এতে লোভনীয় অনুদান ইত্যাদি প্রদর্শিত হয় না তাই আমার প্রশ্ন আছে:

আমি কীভাবে সমস্ত অনুদানকে ওরাকল ডিবিতে তালিকাভুক্ত করতে পারি?

উত্তর:


143

যদি আপনি কেবল সরাসরি টেবিল অনুদানের চেয়ে বেশি (উদাহরণস্বরূপ, ভূমিকাগুলির মাধ্যমে অনুদান, যে কোনও টেবিল নির্বাচন করুন ইত্যাদি সিস্টেম সুবিধাদি) চান তবে এখানে কিছু অতিরিক্ত প্রশ্ন রয়েছে:

কোনও ব্যবহারকারীর জন্য সিস্টেমের সুবিধা:

SELECT PRIVILEGE
  FROM sys.dba_sys_privs
 WHERE grantee = <theUser>
UNION
SELECT PRIVILEGE 
  FROM dba_role_privs rp JOIN role_sys_privs rsp ON (rp.granted_role = rsp.role)
 WHERE rp.grantee = <theUser>
 ORDER BY 1;

সারণী / দর্শনগুলিতে সরাসরি অনুদান:

SELECT owner, table_name, select_priv, insert_priv, delete_priv, update_priv, references_priv, alter_priv, index_priv 
  FROM table_privileges
 WHERE grantee = <theUser>
 ORDER BY owner, table_name;

সারণী / দর্শনগুলিতে অপ্রত্যক্ষ অনুদান:

SELECT DISTINCT owner, table_name, PRIVILEGE 
  FROM dba_role_privs rp JOIN role_tab_privs rtp ON (rp.granted_role = rtp.role)
 WHERE rp.grantee = <theUser>
 ORDER BY owner, table_name;

4
আপনার sys.dba_sys_privs টেবিল দেখার অধিকার নাও থাকতে পারে।
হ্যানিস

4
একেবারে সঠিক. আপনার ডিবিএ দেখুন। যদি তারা প্রত্যাখ্যান করে তবে তাদের নিরাপত্তার উদ্বেগ বৈধ হতে পারে। এই দর্শনগুলির বিষয়বস্তুগুলি দেখে কোনও ব্যবহারকারী তথ্য দেয় যা অন্যথায় তারা সক্ষম হবেন না।
ডিসিউকি

4
role_role_privsটেবিলে যোগ দেওয়া এবং তারপরে CONNECT BY PRIOR granted_role = roleট্রানজিটিভ ভূমিকা সুবিধাগুলির পুনরাবৃত্তি করা আকর্ষণীয় হবে ...
লুকাশ এডার

34

ধরে নিই যে আপনি কোনও নির্দিষ্ট ব্যবহারকারীর প্রাপ্ত সমস্ত বস্তুর উপর অনুদানের তালিকা করতে চান :

select * from all_tab_privs_recd where grantee = 'your user'

এটি ব্যবহারকারীর মালিকানাধীন জিনিসগুলি ফেরত দেবে না। আপনার যদি এটির প্রয়োজন হয়, all_tab_privsপরিবর্তে ভিউ ব্যবহার করুন।


21

দুঃখিত বন্ধুরা, তবে all_tab_privs_recd থেকে নির্বাচন করা যেখানে গ্রান্টি = 'আপনার ব্যবহারকারী' জনসাধারণের অনুদান এবং বর্তমান ব্যবহারকারী অনুদান ব্যতীত অন্য কোনও আউটপুট দেবে না যদি আপনি কোনও পৃথক (আমাদের বলা যাক, এসওয়াইএস) ব্যবহারকারী থেকে নির্বাচন পরিচালনা করেন। যেমন ডকুমেন্টেশন বলে,

ALL_TAB_PRIVS_RECD নিম্নলিখিত ধরণের অনুদানের বর্ণনা দেয়:

Object grants for which the current user is the grantee
Object grants for which an enabled role or PUBLIC is the grantee

সুতরাং, আপনি যদি ডিবিএ হন এবং কোনও নির্দিষ্ট (স্বয়ং এসওয়াইএস নয়) ব্যবহারকারীর জন্য সমস্ত অবজেক্ট অনুদানের তালিকা করতে চান , আপনি সেই সিস্টেমের দর্শনটি ব্যবহার করতে পারবেন না।

এই ক্ষেত্রে, আপনাকে আরও জটিল কোয়েরি করতে হবে। নির্দিষ্ট ব্যবহারকারীর জন্য সমস্ত বস্তু অনুদান নির্বাচন করতে এখানে TOAD থেকে নেওয়া (ট্রেসড) দেওয়া হয়েছে:

select tpm.name privilege,
       decode(mod(oa.option$,2), 1, 'YES', 'NO') grantable,
       ue.name grantee,
       ur.name grantor,
       u.name owner,
       decode(o.TYPE#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
                       4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',
                       7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
                       11, 'PACKAGE BODY', 12, 'TRIGGER',
                       13, 'TYPE', 14, 'TYPE BODY',
                       19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
                       22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',
                       28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE',
                       32, 'INDEXTYPE', 33, 'OPERATOR',
                       34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION',
                       40, 'LOB PARTITION', 41, 'LOB SUBPARTITION',
                       42, 'MATERIALIZED VIEW',
                       43, 'DIMENSION',
                       44, 'CONTEXT', 46, 'RULE SET', 47, 'RESOURCE PLAN',
                       66, 'JOB', 67, 'PROGRAM', 74, 'SCHEDULE',
                       48, 'CONSUMER GROUP',
                       51, 'SUBSCRIPTION', 52, 'LOCATION',
                       55, 'XML SCHEMA', 56, 'JAVA DATA',
                       57, 'EDITION', 59, 'RULE',
                       62, 'EVALUATION CONTEXT',
                       'UNDEFINED') object_type,
       o.name object_name,
       '' column_name
        from sys.objauth$ oa, sys.obj$ o, sys.user$ u, sys.user$ ur, sys.user$ ue,
             table_privilege_map tpm
        where oa.obj# = o.obj#
          and oa.grantor# = ur.user#
          and oa.grantee# = ue.user#
          and oa.col# is null
          and oa.privilege# = tpm.privilege
          and u.user# = o.owner#
          and o.TYPE# in (2, 4, 6, 9, 7, 8, 42, 23, 22, 13, 33, 32, 66, 67, 74, 57)
  and ue.name = 'your user'
  and bitand (o.flags, 128) = 0
union all -- column level grants
select tpm.name privilege,
       decode(mod(oa.option$,2), 1, 'YES', 'NO') grantable,
       ue.name grantee,
       ur.name grantor,
       u.name owner,
       decode(o.TYPE#, 2, 'TABLE', 4, 'VIEW', 42, 'MATERIALIZED VIEW') object_type,
       o.name object_name,
       c.name column_name
from sys.objauth$ oa, sys.obj$ o, sys.user$ u, sys.user$ ur, sys.user$ ue,
     sys.col$ c, table_privilege_map tpm
where oa.obj# = o.obj#
  and oa.grantor# = ur.user#
  and oa.grantee# = ue.user#
  and oa.obj# = c.obj#
  and oa.col# = c.col#
  and bitand(c.property, 32) = 0 /* not hidden column */
  and oa.col# is not null
  and oa.privilege# = tpm.privilege
  and u.user# = o.owner#
  and o.TYPE# in (2, 4, 42)
  and ue.name = 'your user'
  and bitand (o.flags, 128) = 0;

এটি আপনার (নির্দিষ্ট) ব্যবহারকারীর জন্য সমস্ত বস্তু অনুদানের (কলাম অনুদান সহ) তালিকাভুক্ত করবে। আপনি যদি কলাম স্তরের অনুদানগুলি না চান তবে 'ইউনিয়ন' ধারা দিয়ে নির্বাচনের শুরুতে সমস্ত অংশ মুছুন।

ইউপিডি: ডকুমেন্টেশন অধ্যয়নরত আমি একটি অন্য দৃষ্টিভঙ্গি পেয়েছি যা সমস্ত অনুদানকে আরও সহজ উপায়ে তালিকাবদ্ধ করে:

select * from DBA_TAB_PRIVS where grantee = 'your user';

মনে রাখবেন যে ওরাকল-এ কোনও ডিবিএ_তাব_আরআইপিআরসিআরসিডি ভিউ নেই


12

আমার জানা সবচেয়ে বিস্তৃত এবং নির্ভরযোগ্য পদ্ধতিটি এখনও ডিবিএমএস_মেটাডাটা ব্যবহার করে :

select dbms_metadata.get_granted_ddl( 'SYSTEM_GRANT', :username ) from dual;
select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', :username ) from dual;
select dbms_metadata.get_granted_ddl( 'ROLE_GRANT', :username ) from dual;

আকর্ষণীয় উত্তর যদিও।


5
select distinct 'GRANT '||privilege||' ON '||OWNER||'.'||TABLE_NAME||' TO '||RP.GRANTEE
from DBA_ROLE_PRIVS RP join ROLE_TAB_PRIVS RTP 
on (RP.GRANTED_ROLE = RTP.role)  
where (OWNER in ('YOUR USER') --Change User Name
   OR RP.GRANTEE in ('YOUR USER')) --Change User Name
and RP.GRANTEE not in ('SYS', 'SYSTEM')
;

7
কিছু ব্যাখ্যা এই উত্তরটিকে সহায়তা করবে, কারণ যখন অন্য লোকেরা এসে এটি সন্ধান করে।
অ্যান্ড্রু বারবার

0

নিম্নলিখিত প্রশ্নের সাথে এক ব্যবহারকারীর সমস্ত সুযোগসুবিধা পেতে ব্যবহার করা যেতে পারে .. প্রথম ক্যোয়ারীতে কেবলমাত্র ব্যবহারকারী নাম সরবরাহ করুন এবং আপনি এতে সমস্ত সুযোগসুবিধা পাবেন

ব্যবহারকারী হিসাবে AS ('দ্বিগুণ থেকে' নির্বাচন 'SCHEMA_USER'), ভূমিকা AS (নির্বাচন করুন rp.GRANTEE = ব্যবহারকারীর.আর.আর.আর.আর.সি.আর.আরআইপিআর_র_র_র_র_র_র_র পক্ষ থেকে ইউনিয়ন নির্বাচন-রিকোয়ারলোকল_আর। GRANTEE = users.usr)), ট্যাব_প্রিজাইলেজ এএস (নির্বাচন করুন মালিক, ট্যাবলেট_NAME, প্রাইভেটজি থেকে ভূমিকা ভূমিকা_tab_privs rtp.No rtp.rol = r.granted_rol ইউনিয়ন নির্বাচন করুন মালিকানা, ট্যাবলেট_NAME, প্রাইভেট্রাইজ ব্যবহারকারীদের মাধ্যমে DGT ব্যবহারকারীরা। usr), sys_privileges AS (dsp.grantee = users.usr- এর DBS_sys_privs ডিএসপি ব্যবহারকারীদের সাথে নির্বাচন করুন) মালিকানাধীন ট্যাব_প্রাইভেজ অর্ডার থেকে টেবিলের নাম নির্বাচন করুন - * * সিস_প্রাইভিলিজ থেকে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.