অনুমোদিত হওয়ার পরেও "নির্বাচিত অনুমতি প্রত্যাখ্যান করা হয়নি" তা প্রাপ্ত করা


11

আমি একজন প্রোগ্রামার, ডিবিএ নই ... বিপজ্জনক হওয়ার পক্ষে আমি যথেষ্ট জানি।

আমি উত্তরাধিকার সূত্রে প্রাপ্ত একটি লিগ্যাসি ব্যবহারকারীর সাথে একটি ডেটাবেস পেয়েছি যা ডাটাবেসের জন্য একজন db_owner। ব্যবসায়ের কারণে আমরা বিদ্যমান ব্যবহারিক টেবিল, স্কিমা ইত্যাদির জন্য এই ব্যবহারকারীর অনুমতিটি সামঞ্জস্য করতে পারি না, তবে কিছু নতুন সারণী তৈরি হচ্ছে এবং আমি কেবল চাই যে এই ব্যবহারকারীর সেলেক্ট অ্যাক্সেস রয়েছে।

এই টেবিলগুলির জন্য এই ব্যবহারকারীর জন্য অনুমতি সেট করা হয়েছে যাতে সलेक्ट নির্বাচন ব্যতীত সবকিছুই DENIED হয়, যা গ্রান্টে সেট করা থাকে।

তবুও যখন এই ব্যবহারকারী (ডাবডমিন) এই টেবিলগুলির একটিতে (অ্যাকাউন্টিংএডিট) একটি নির্বাচন করার চেষ্টা করেন, এই ত্রুটিটি ঘটে:

The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.

এই টেবিল / ব্যবহারকারীর জন্য কী অনুমতি নির্ধারিত হয়েছে তা চেষ্টা করে দেখতে এই এসকিউএল চালিয়েছি:

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions

এবং এই আমি ফিরে পেতে:

AccountingAudit dbadmin dbo ALTER   DENY
AccountingAudit dbadmin dbo CONTROL DENY
AccountingAudit dbadmin dbo DELETE  DENY
AccountingAudit dbadmin dbo INSERT  DENY
AccountingAudit dbadmin dbo REFERENCES  DENY
AccountingAudit dbadmin dbo SELECT  GRANT
AccountingAudit dbadmin dbo TAKE OWNERSHIP  DENY
AccountingAudit dbadmin dbo UPDATE  DENY
AccountingAudit dbadmin dbo VIEW DEFINITION DENY
AccountingAudit dbadmin dbo VIEW CHANGE TRACKING    DENY

মনে হচ্ছে এটি ঠিক কাজ করা উচিত?

আমি নির্বাচিত কলটি করছি এসএসএমএসের মধ্যে থেকে অ্যাকাউন্টিংঅডিট থেকে খুব বেসিক SELECT *। আমি কোনও বিশেষ এসপি_সেকিউটসকিএল বা এর মতো কিছু করছি না।

আমি স্পষ্টভাবে অনুমতি দেওয়ার চেষ্টা করেছি:

GRANT SELECT ON [dbo].AccountingAudit TO dbadmin

এটির কোনও প্রভাব নেই (এটি কেন হবে, উপরের ক্যোয়ারীটি ইতিমধ্যে এটি মঞ্জুরিপ্রাপ্ত দেখায়! ;-)

আমি স্ট্যাকওভারফ্লো ডটকম এবং অন্য কোথাও অনুসন্ধান করেছি এবং এখনও চেষ্টা করেছি এমন কিছুই খুঁজে পাচ্ছি না। আমি ভাবছি যে স্কিমার সেটআপ কীভাবে এটির সাথে কিছু করার আছে। (এই মুহুর্তে আমি স্কিমা সম্পর্কে খুব কম জানি))

কোন ধারনা? ধন্যবাদ!

উত্তর:


10

আমি এখানে নিশ্চিত নই, তবে আমি একটি অঙ্গ নিয়ে বাইরে যাব। আমি মনে করি আপনার সমস্যাটি আপনার DENY CONTROLরেকর্ডের সাথে থাকতে পারে । দেখুন এখানে Page Down অর্ধেক পথ সম্পর্কে:

একটি ডাটাবেসে কনট্রোল অনুমতি অস্বীকার স্পষ্টভাবে ডাটাবেসে সংযোগ অনুমতি অস্বীকার করে। একটি অধ্যক্ষ যা একটি ডাটাবেসে কনট্রোল অনুমতি অস্বীকার করা হয় সেই ডাটাবেসের সাথে সংযোগ করতে সক্ষম হবে না।

আমি বুঝতে পারি যে উদাহরণটি একটি ডাটাবেসের জন্য, তবে এটি আরও একটি গ্রানুয়াল স্তরে নিয়ে যান। একটি DENY CONTROLএকটি টেবিলের উপর অস্বীকার করবে সব এটা বিশেষাধিকার, আমি অনুমান করছি। এ REVOKE CONTROLথেকে মুক্তি পেতে একটি করুন এবং দেখুন এটি আপনার সমস্যার সমাধান করে কিনা।

যদি তা হয় তবে আপনাকে ব্যবহারকারীকে একটি ডাটাবেসের ভূমিকায় রাখতে হবে বা তাদের টেবিলের বিপরীতে স্পষ্ট সুযোগগুলি অস্বীকার করতে হবে।


1
ধন্যবাদ! প্রাথমিকভাবে আমার পরীক্ষায় আমি আবিষ্কার করেছি যে কন্ট্রোলকে যদি অস্বীকার না করা হয় তবে তারা নির্বাচন করতে পারে। কিন্তু বিওএল পড়ার সময় আমি এটির ভুল ব্যাখ্যা করেছিলাম যার অর্থ আমি ব্যবহারকারীকে টেবিলের উপরে পুরোপুরি নিয়ন্ত্রণ দিয়ে যাচ্ছি। আমি এখন দেখতে পাচ্ছি যে যতক্ষণ না আমি তাদের নিয়ন্ত্রণ করতে অস্বীকার করি, ততক্ষণ আমি অন্যান্য অনুমতিগুলি (INSERT, মোছা, ইত্যাদি) DENY স্তরে রাখতে পারি এবং আমার যে অনুমতি স্তরের প্রয়োজন তা অর্জন করতে পারি। ধন্যবাদ!
ম্যাসন জি। ঝুইটি

এটি একটি সূক্ষ্মতা যা আমি উত্সাহিত করেছি, আমার সমস্যা সমাধান না করেও, যা আমি বোধ করি সবচেয়ে বেশি উপেক্ষা করব। পৃথকভাবে, আমি সক্রিয় ডিরেক্টরি গ্রুপগুলি ব্যবহার করে যদি দেখতে পেয়েছি, আপনি গ্রুপ সদস্যতা পরিবর্তন করেছেন, repadmin / syncall অগত্যা সমস্যাগুলি সমাধান না করে এবং সার্ভারটিকে পুনরায় বুট করতে সমস্যাটি স্থির করে দেখতে পেয়েছি। যদিও স্লেজহ্যামার পদ্ধতির কম খুঁজছেন looking
জন জাবরোস্কি

0
  1. sp_DBPermissionsঅনুমতিগুলি দেখার জন্য কেন ফিশারের সঞ্চিত পদ্ধতিটি ব্যবহার করুন ।

    1. নিশ্চিত করুন DENY CONTROLসাধারণ ছাড়াও টেবিল প্রয়োগ করা হয় না, DENY SELECT, DENY INSERT, DENY UPDATE, DENY DELETEএবং DENY REFERENCES
    2. যদি SELECTবিবৃতিতে সারণী-মূল্যবান ফাংশন রয়েছে, তা নিশ্চিত EXECUTE AS OWNERকরুন যে টেবিলের মূল্যবান ফাংশনটিতে একটি রয়েছে বা GRANT EXECUTEএটিতে (এবং না DENY EXECUTE!) আছে। যদি এটি হয় তবে ত্রুটি বার্তাটি আরও সাবধানতার সাথে পড়ুন কারণ এটি সম্ভবত টেবিলে SELECT অনুমতি প্রত্যাখ্যান করা হবে না, বরং এর পরিবর্তে এক্সিকিউটি সম্পর্কে কিছু অস্বীকার করা হচ্ছে।
  2. যদি ব্যবহারকারী কোনও AD ব্যবহারকারী বা গোষ্ঠী হয় তবে ব্যবহারকারীর login_token(গুলি) নির্ধারণ করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করুন :

EXECUTE AS LOGIN = 'EXAMPLEDOMAIN\JOHN.DOE';
SELECT * FROM sys.login_token;
REVERT;
  1. প্রকৃত বাস্তবায়ন পরিকল্পনাটি দেখুন। যদি ত্রুটিটি কোনও সঞ্চিত পদ্ধতির অভ্যন্তরে থাকে SET NOCOUNT ON;তবে প্রকৃত বাস্তবায়ন পরিকল্পনা আপনাকে এসএসএমএসের বার্তাগুলি ট্যাবটি দেখে কেবল মনোযোগ দিতে পারে না বলে অন্তর্দৃষ্টি দেয়, যেহেতু "সারিগুলি প্রভাবিত" আপনার নিয়ন্ত্রণের বাইরে থাকতে পারে।

    1. ট্রিগার বা টেম্পোরাল টেবিলগুলি সন্ধান করুন।
  2. আপনি স্টোরেজ পদ্ধতি এবং এসএসএমএস "অবজেক্টের নির্ভরতা" দেখুন এবং এসকিউএল সার্ভার অবজেক্ট নির্ভরতাগুলি খুঁজতে বিভিন্ন উপায়ে স্বেতলানা গোলোভকো দ্বারা বর্ণিত কৌশলগুলি হিসাবে বিবৃতিটি সংকলন করতে পারেন

  3. এসকিউএল সার্ভারের অনুমতির মূল্যায়ন করছে কোন বস্তুগুলির উপর নজর রাখার জন্য এসকিউএল সার্ভার প্রোফাইলার সুরক্ষা ইভেন্ট "অডিট স্কিমা অবজেক্ট অ্যাক্সেস ইভেন্ট" এবং কলামগুলি "টেক্সটডাটা" এবং "সাফল্য" ব্যবহার করুন। - আমি এমন পরিস্থিতি দেখেছি যেখানে এই ইভেন্টের জন্য দুটি সারি নির্গত হয় এবং একটি মান সাফল্য = 1 এবং অন্যটি সাফল্য = 0 বলে। এই দৃশ্যে, আমি কাজটির সন্ধান পেয়েছি এমন একমাত্র সমাধান হ'ল সার্ভারটি পুনরায় বুট করা। এমনকি দৌড়ানোর repadmin /syncallফলেও সমস্যার সমাধান হয়নি, অ্যাপ্লিকেশন শুরু করা এবং বন্ধ করা হয়নি (এবং তাই সংযোগ পুল)।

  4. লগইনের কার্যকর কার্যকারিতা নির্ধারণ করুন:

-- '<domain>\<username>' is a domain user in the group you wish to test
EXECUTE AS LOGIN = '<domain>\<username>';
SELECT * FROM fn_my_permissions('Database.Schema.Table', 'OBJECT');
REVERT;
  1. যদি ব্যবহারকারী কোনও এডি ব্যবহারকারী বা গোষ্ঠীর সাথে আবদ্ধ repadmin /syncallথাকে তবে সক্রিয় ডিরেক্টরিতে হওয়া কোনও পরিবর্তনকে আপনার ডোমেন নিয়ামকগুলিকে সিঙ্ক করতে বাধ্য করার জন্য দৌড় বিবেচনা করুন। - কেউ যদি দুটি ডোমেন নিয়ন্ত্রকের বর্তমান মানগুলির তুলনা করার ভাল উপায় সম্পর্কে জানেন তবে দয়া করে আমাকে জানান।

  2. পুরো সিস্টেমটির হার্ড রিবুট বিবেচনা করার আগে, সেই ব্যবহারকারীর জন্য সমস্ত সক্রিয় সংযোগগুলি হত্যা করার চেষ্টা করুন। কারণটি হ'ল ব্যবহারকারী তাদের ডিসি থেকে উইন্ডোজ টোকেন পান যার মধ্যে তাদের গোষ্ঠীগুলি অন্তর্ভুক্ত রয়েছে। ব্যবহারকারী নতুন টোকেন না পাওয়া পর্যন্ত টোকেন আপডেট হবে না - সাধারণত লগ অফ করে এবং তারপরে আবার লগ ইন করে।

  3. সিস্টেমটি পুনরায় বুট করুন। এটা আমার জন্য কাজ করেছে। এখনও কেন 100% নিশ্চিত নয়। আপনি যদি এখনই বেঁচে থাকতে পারেন তবেই এটি করুন! আপনার স্বাক্ষর বহিরাগত লেনদেনের সময় এই কাজটি করার বিষয়ে যত্নবান হন!

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