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


113

কেউ কি দয়া করে আমাকে জানান যে কীভাবে কোনও এসকিএল-কনসোলে কোনও নির্দিষ্ট ব্যবহারকারীর কাছ থেকে সমস্ত সুযোগ-সুবিধা / বিধিগুলি দেখানো যায়?

উত্তর:


164

আপনি নীচে এই দেখুন চেষ্টা করতে পারেন।

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

ডিবিএ এবং অন্যান্য শক্তি ব্যবহারকারীরা DBA_এই একই মতামতের সংস্করণ সহ অন্যান্য ব্যবহারকারীদের প্রদত্ত সুযোগগুলি খুঁজে পেতে পারেন । তারা নথিভুক্ত করা হয়

এই মতামতগুলি কেবল ব্যবহারকারীকে সরাসরি অনুমোদিত সুযোগগুলি দেখায় । খোঁজা সব ভূমিকা মাধ্যমে পরোক্ষভাবে মঞ্জুর সহ বিশেষাধিকার, আরো জটিল রিকার্সিভ এসকিউএল স্টেটমেন্ট প্রয়োজন হয়:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;

21

চারপাশে ভাসমান বিভিন্ন স্ক্রিপ্ট রয়েছে যা আপনি কতটা পাগল পেতে চান তার উপর নির্ভর করে এটি করবে। আমি ব্যক্তিগতভাবে পিট ফিনিগানের সন্ধান_সকল_প্রাইভ স্ক্রিপ্টটি ব্যবহার করব ।

আপনি যদি এটি নিজে লিখতে চান তবে ক্যোয়ারী বরং চ্যালেঞ্জিং হয়ে যায়। ব্যবহারকারীদের সিস্টেমে সুযোগ-সুবিধা দেওয়া যেতে পারে যা এতে দৃশ্যমান DBA_SYS_PRIVS। এগুলিতে দৃশ্যমান অবজেক্টের সুবিধাদি দেওয়া যেতে পারে DBA_TAB_PRIVS। এবং এগুলির মধ্যে দৃশ্যমান ভূমিকাগুলি মঞ্জুরি দেওয়া যেতে পারে DBA_ROLE_PRIVS(ভূমিকাগুলি ডিফল্ট বা অ-ডিফল্ট হতে পারে এবং পাশাপাশি একটি পাসওয়ার্ডও প্রয়োজন হতে পারে, তাই কেবল কোনও ব্যবহারকারীকে কোনও ভূমিকা দেওয়া হয়েছে তার অর্থ এই নয় যে ব্যবহারকারীর প্রয়োজনীয় সুযোগগুলি তিনি ব্যবহার করতে পারবেন ডিফল্টরূপে ভূমিকার মাধ্যমে অর্জিত)। কিন্তু ভূমিকা, ঘুরে, মঞ্জুর সিস্টেম বিশেষাধিকার, বস্তুর বিশেষাধিকার, এবং অতিরিক্ত ভূমিকা যা দিকে তাকিয়ে দেখা যাবে হতে পারে ROLE_SYS_PRIVS, ROLE_TAB_PRIVSএবং ROLE_ROLE_PRIVS। পিট-র স্ক্রিপ্ট সেই সমস্ত সম্পর্কের মধ্য দিয়ে যায় যা ব্যবহারকারীর কাছে প্রবাহিত সমস্ত সুযোগগুলি দেখায়।


স্ক্রিপ্টটি দুর্দান্তভাবে সবেমাত্র তা পরীক্ষা করে দেখা গেছে
I.Tyger

1
আপনার ইউটিএল_এফআইএল প্যাকেজটিতে বিশেষাধিকার প্রয়োজন অথবা অন্যথায় পিট ফিনিগানের স্ক্রিপ্টটি চালানোর সময় আপনি একটি ত্রুটি পেয়েছেন: "সনাক্তকারী 'ইউটিএল_ফায়াল' অবশ্যই ঘোষণা করা উচিত"। আপনি এসকিউএল বিকাশকারীর মাধ্যমে রোল সিসডবার সাথে সিস হিসাবে সংযোগ করতে পারেন এবং তারপরে এটি কাজ করে বা এই প্যাকেজের ব্যবহারের জন্য নিজেকে বিশেষাধিকার প্রদানের অনুমতি দেবে: ইউটিএল_এফআইএল <ইউজার> -এ এক্সিকিউট করুন;
জানুয়ারী

1
এবং আমাদের মধ্যে যাদের জন্য কোনও SYSসুযোগ সুবিধাই নেই এবং কেবল আমাদের নিজের অ্যাকাউন্টের সুবিধাগুলি দেখতে চান, স্ক্রিপ্টটি সম্পূর্ণ মূল্যহীন। স্ক্রিপ্টটি দেখায় আমার UTL_FILEকাছে DBA_SYS_PRIVSএবং এর মধ্যে DBAএবং অন্যান্য SYSঅঞ্চলে অ্যাক্সেস নেই ।
vapcguy

আমি মনে করি না ROLE_SYS_PRIVS, ROLE_TAB_PRIVSআর ROLE_ROLE_PRIVSচাহিদা পরীক্ষা করা হবে। দস্তাবেজগুলি নির্দেশ করে যে তারা বর্তমান ব্যবহারকারীর জন্য for
jpmc26

কারও কাছে যদি এই স্ক্রিপ্টগুলির অনুলিপি থাকে তবে তারা কি এখানে বা অন্য কোথাও কোস্টের মতো আরও কিছু চিরসবুজ পোস্ট করতে পারেন? সাইট ডাউন আছে।
মাইকেল থম্পসন

7

আরেকটি দরকারী সংস্থান:

http://psoug.org/reference/roles.html

  • DBA_SYS_PRIVS
  • DBA_TAB_PRIVS
  • DBA_ROLE_PRIVS

2
আপনার না DBAবা SYSভূমিকা না থাকলে এবং আপনি কেবল নিজের অ্যাকাউন্টের সুবিধাগুলি সন্ধান করতে চান।
vapcguy

2

যদিও রাভিতেজা ভুতুকুরির উত্তর কাজ করে এবং দ্রুত একত্রে তাড়িত হয়, ফিল্টারগুলি পরিবর্তিত করার জন্য এটি বিশেষভাবে নমনীয় নয় এবং আপনি প্রোগ্রামগতভাবে কিছু করতে চাইলে খুব বেশি সহায়তা করে না। সুতরাং আমি আমার নিজের জিজ্ঞাসাটি একসাথে রেখেছি:

SELECT
    PRIVILEGE,
    OBJ_OWNER,
    OBJ_NAME,
    USERNAME,
    LISTAGG(GRANT_TARGET, ',') WITHIN GROUP (ORDER BY GRANT_TARGET) AS GRANT_SOURCES, -- Lists the sources of the permission
    MAX(ADMIN_OR_GRANT_OPT) AS ADMIN_OR_GRANT_OPT, -- MAX acts as a Boolean OR by picking 'YES' over 'NO'
    MAX(HIERARCHY_OPT) AS HIERARCHY_OPT -- MAX acts as a Boolean OR by picking 'YES' over 'NO'
FROM (
    -- Gets all roles a user has, even inherited ones
    WITH ALL_ROLES_FOR_USER AS (
        SELECT DISTINCT CONNECT_BY_ROOT GRANTEE AS GRANTED_USER, GRANTED_ROLE
        FROM DBA_ROLE_PRIVS
        CONNECT BY GRANTEE = PRIOR GRANTED_ROLE
    )
    SELECT
        PRIVILEGE,
        OBJ_OWNER,
        OBJ_NAME,
        USERNAME,
        REPLACE(GRANT_TARGET, USERNAME, 'Direct to user') AS GRANT_TARGET,
        ADMIN_OR_GRANT_OPT,
        HIERARCHY_OPT
    FROM (
        -- System privileges granted directly to users
        SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT
        FROM DBA_SYS_PRIVS
        WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS)
        UNION ALL
        -- System privileges granted users through roles
        SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, ALL_ROLES_FOR_USER.GRANTED_USER AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT
        FROM DBA_SYS_PRIVS
        JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_SYS_PRIVS.GRANTEE
        UNION ALL
        -- Object privileges granted directly to users
        SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, GRANTABLE, HIERARCHY
        FROM DBA_TAB_PRIVS
        WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS)
        UNION ALL
        -- Object privileges granted users through roles
        SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, ALL_ROLES_FOR_USER.GRANTED_ROLE AS GRANT_TARGET, GRANTABLE, HIERARCHY
        FROM DBA_TAB_PRIVS
        JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_TAB_PRIVS.GRANTEE
    ) ALL_USER_PRIVS
    -- Adjust your filter here
    WHERE USERNAME = 'USER_NAME'
) DISTINCT_USER_PRIVS
GROUP BY
    PRIVILEGE,
    OBJ_OWNER,
    OBJ_NAME,
    USERNAME
;

সুবিধাদি:

  • আমি খুব সহজেই বিভিন্ন ধরণের তথ্যের দ্বারা ফিল্টার করতে পারি, যেমন বস্তু, অধিকার, এটি কোনও বিশেষ ভূমিকার মধ্য দিয়ে হোক ইত্যাদি etc. কেবলমাত্র একটি WHEREধারাটি পরিবর্তন করে ।
  • এটি একটি একক ক্যোয়ারী, অর্থাত আমাকে মানসিকভাবে ফলাফলগুলি একসাথে রচনা করতে হবে না।
  • এটি সুযোগ সুবিধার পার্থক্য উত্সগুলি জুড়ে তারা সাবোবজেক্টস ("শ্রেণিবদ্ধ" অংশ) এর সুবিধাগুলি অন্তর্ভুক্ত করে কিনা সে সুযোগটি তারা মঞ্জুর করতে পারে কিনা এবং তা সমাধান করে।
  • বিশেষাধিকারটি প্রত্যাহার করার জন্য আমার যা করা দরকার তা প্রত্যক্ষ করা সহজ, কারণ এটি অধিকারের সমস্ত উত্সকে তালিকাবদ্ধ করে।
  • এটি টেবিল এবং সিস্টেমের সুবিধাগুলিকে একক সুসংগত দৃশ্যে সংযুক্ত করে, আমাদের ব্যবহারকারীর সমস্ত সুযোগ সুবিধাগুলি তালিকাভুক্ত করার অনুমতি দেয় fell
  • এটি একটি ক্যোয়ারী , এমন কোনও ফাংশন নয় যা এই সমস্ত কিছুর বাইরে DBMS_OUTPUTবা কোনও কিছুর (পেট ফিনিগানের লিঙ্কযুক্ত স্ক্রিপ্টের সাথে তুলনা করে) আউট করে। এটি প্রোগ্রামেটিক ব্যবহার এবং রফতানির জন্য এটি দরকারী করে তোলে।
  • ফিল্টার পুনরাবৃত্তি হয় না; এটি কেবল একবার উপস্থিত হয়। এটি পরিবর্তন করা সহজ করে তোলে।
  • আপনার যদি প্রতিটি ব্যক্তির দ্বারা এটি পরীক্ষা করা প্রয়োজন হয় তবে সাবকোয়ারিটি সহজেই টেনে আনা যায় GRANT

আমার জন্য কয়েকটি টোডো: ১. ব্যবহারকারী যদি অন্য ব্যবহারকারীকে ভূমিকা দিয়ে বিশেষত্ব প্রদান করতে পারে তবে সূচক যুক্ত করুন। ২) ডিবিএ সুবিধা ছাড়াই বর্তমান ব্যবহারকারীর জন্য এটি কীভাবে করবেন তা নির্ধারণ করুন। সম্ভবত USER_SYS_PRIVS(সরাসরি মঞ্জুরিপ্রাপ্ত সিস্টেমের সুবিধাদি), USER_TAB_PRIVS(সরাসরি অনুমোদিত অবজেক্ট বেসরকারী USER_ROLE_PRIVS), ROLE_ROLE_PRIVS(উত্তরাধিকার সূত্রে প্রাপ্ত ভূমিকা পাওয়ার জন্য), ROLE_SYS_PRIVS(সিস্টেমের রোলগুলির মাধ্যমে বেসরকারী) এবং ROLE_TAB_PRIVS(ভূমিকাগুলির মাধ্যমে অবজেক্ট সিকিস) অন্তর্ভুক্ত রয়েছে। বিতৃষ্ণা। ওরাকল এত জটিল।
jpmc26

1

সমস্ত ব্যবহারকারীর কাছ থেকে সমস্ত সুযোগ-সুবিধার তালিকা পেতে আপনি নীচের কোডটি ব্যবহার করতে পারেন।

select * from dba_sys_privs 

এটি সমস্ত সুবিধার তালিকা করে না not বছরের পর বছর ধরে আপনার আগে থাকা বেশ কয়েকটি উত্তর দ্বারা প্রদর্শিত হিসাবে , এটি টেবিলের সুযোগগুলি এবং ভূমিকার মাধ্যমে প্রদত্ত সমস্ত সুযোগগুলি বাদ দেয়।
jpmc26

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