ALL TABLE অনুমতি প্রদান কতটা বিপজ্জনক?


11

নিম্নলিখিত পরিস্থিতিতে কল্পনা করুন

CREATE DATABASE test

GO

USE test;    

CREATE TABLE dbo.Customer
  (
     CustomerId   INT,
     Email        VARCHAR(100),
     SensitiveData VARCHAR(20)
  );

INSERT INTO dbo.Customer
VALUES     (1,'abc@foo.com','12346789');

কিছু সময়ে একটি ইটিএল প্রক্রিয়া লেখা হয় যা testডাটাবেসে কিছু ক্রিয়াকলাপ সম্পাদন করে।

CREATE USER etlUser WITHOUT LOGIN; /*For demo purposes*/

CREATE TABLE dbo.StagingTable
  (
     StagingTableId INT,
     SomeData       VARCHAR(100),
  )

GRANT UPDATE,INSERT,DELETE,SELECT,ALTER ON dbo.StagingTable TO etlUser;

DENY SELECT ON dbo.Customer TO etlUser;
DENY SELECT ON dbo.Customer (SensitiveData) TO etlUser; /*For good measure*/

এটির ব্যবহারকারীর Customerটেবিলের অনুমতি থাকা উচিত নয় (এবং অবশ্যই SensitiveDataকলামে নয়) সুতরাং এগুলি উপরোক্তভাবে সুস্পষ্টভাবে অস্বীকার করা হয়েছে।

ইটিএল প্রক্রিয়াটি কেটে যায় dbo.StagingTableযাতে তার ALTERউপর সারণীর অনুমতি দেওয়া হয়।

সুরক্ষা নিরীক্ষণের সময় এটি পতাকাঙ্কিত হয়। এই পরিস্থিতি কতটা বিপজ্জনক?


ALTER TABLE ADD COLUMN এর মতো তুলনামূলক নিরীহ ক্রিয়াগুলি অন্যান্য ক্রিয়াগুলির মতোই কেন আচরণ করা হয় (অল্টার, ড্রপ, সীমাবদ্ধতা, ট্রিগার)?
smci

উত্তর:


16

অত্যন্ত বিপজ্জনক ...

StagingTableনিজের কাঠামো পরিবর্তনের সুস্পষ্ট অনুমতি ছাড়াও ALTER TABLEঅনুমতি তাদের টেবিলে ট্রিগার তৈরি করতে দেয়। সুতরাং মালিকানা শৃঙ্খলার মাধ্যমে এই ক্ষেত্রে তারা সংবেদনশীল গ্রাহক ডেটা উভয়ই দেখতে পাবে (স্পষ্ট DENYঅনুমতি থাকা সত্ত্বেও ) এবং এই দ্বিতীয় টেবিলে ভাঙচুর করতে পারে।

EXECUTE AS user='etlUser'

GO

CREATE OR ALTER TRIGGER TR ON dbo.StagingTable AFTER UPDATE AS 
/*Exposure of sensitive data*/
SELECT * FROM dbo.Customer;

/*Vandalism*/
DELETE FROM dbo.Customer;

go

--Fire the trigger
UPDATE dbo.StagingTable SET SomeData = SomeData WHERE 1=0;

REVERT

8

ট্রিগার যুক্ত করতে সক্ষম হওয়া ছাড়াও, অল্টার টেবিল অনুমতিও এর জন্য অনুমতি দেয়:

  1. ট্রিগার অক্ষম করা (নিরীক্ষণের ট্রেইল এড়ানো)
  2. সীমাবদ্ধতাগুলি অক্ষম করুন (খারাপ ডেটার জন্য অনুমতি দেওয়া)
  3. পরিবর্তনগুলি বাধা (খারাপ ডেটার জন্য অনুমতি দেওয়া)
  4. পরিবর্তিত কলাম সংজ্ঞা (ডেটাটাইপ, সর্বাধিক আকার, NULLability পরিবর্তন করুন)
  5. একটি গণিত কলাম যুক্ত করুন যাতে একটি টি-এসকিউএল ইউডিএফ কল করে (একটি সমান্তরাল পরিকল্পনা পাওয়া খুব কঠিন করে তোলে, যা সহজেই কার্য সম্পাদনকে আঘাত করতে পারে)

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

ভাগ্যক্রমে, এটি যে কেউ এই অনুমতি দেওয়ার প্রয়োজনীয় না হয়, না এটা প্রয়োজনীয় একটি সঞ্চিত পদ্ধতি ব্যবহার করে এই মোড়ানো EXECUTE ASদফা (সাধারণত দ্বারা অনুসরণ 'dbo'বা OWNER)। মডিউল সাইন ইন স্বাক্ষরিত কোড (সঞ্চিত পদ্ধতি, ট্রিগারস, স্কেলারার ইউডিএফ, এবং মাল্টি-স্টেটমেন্ট টিভিএফ) এর পিছনে সুবিধাযুক্ত ক্রিয়াকলাপগুলির সহজ বিমূর্তনের অনুমতি দেয়। আমার কাছে ডিবিএ.এসই-তে নিম্নলিখিত উত্তরগুলিতে কীভাবে এটি সম্পাদন করা যায় তার উদাহরণ সহ কোড রয়েছে:

এই দুটি উত্তরের মধ্যে পার্থক্য হ'ল স্বাক্ষর-ভিত্তিক ব্যবহারকারীকে দেওয়া অনুমতি। মঞ্জুরি দেওয়ার অনুমতি (বা এতে যুক্ত হতে ডিবি রোল) কী প্রয়োজন তা নির্ভর করে। আপনার যদি কেবল একটি একক টেবিলের অনুমতি প্রয়োজন হয় তবে কেবলমাত্র ALTERসেই টেবিলে মঞ্জুরি দিন । নির্দিষ্ট স্কিমাতে সমস্ত টেবিলের জন্য যদি অনুমতি প্রয়োজন হয় তবে স্বতন্ত্র টেবিলগুলিকে অনুমতি দেবেন না, পরিবর্তে নিজেই স্কিমাকে অনুমতি দিন। ইত্যাদি।

ইডিএল ব্যবহারকারীর জন্য বিশেষত একটি স্কিমা তৈরি করার জন্য, বা EXECUTE ASধারাটি ব্যবহারের তুলনায় মডিউল সই করা কয়েকটি অতিরিক্ত পদক্ষেপ but

  1. উপরের লিঙ্কযুক্ত উভয় জবাবগুলিতে কোড উপলব্ধ এবং এটি প্রদত্ত যে এটি কেবলমাত্র একটি সাধারণ অনুলিপি এবং পেস্ট paste
  2. এটি অবশ্যই সবচেয়ে নিরাপদ বিকল্প উপলব্ধ। এটি কেবলমাত্র সেই কোডটির সেই অংশের মাধ্যমেই এই ক্রিয়াকলাপের অনুমতি দেয় এবং কেবলমাত্র সেই কোডটির EXECUTEঅনুমতিপ্রাপ্তদেরই। স্কিমার মালিক হওয়ার কারণে অপ্রয়োজনীয় কিছু নিষ্ক্রিয় অনুমতিের অনুমতি দেয়। এবং, ব্যবহার করে EXECUTE AS 'dbo'বা EXECUTE AS OWNER(মালিককে ধরে নিচ্ছেন dbo) পুরো প্রক্রিয়াটি দেবে , সেই বিন্দু থেকে dboঅনুমতি, কেবলমাত্র আপনার ব্যবহৃত স্টোরেজ পদ্ধতি / ট্রিগার / ফাংশন নয় EXECUTE AS। মডিউল সাইন ইন কেবলমাত্র আপনার স্বাক্ষরিত কোডের সাথে অনুমতি সীমাবদ্ধ করে, এবং স্বাক্ষরিত কোড দ্বারা কল করা কোনও কোড নয়।

2
কিছু সিস্টেমে (কমপক্ষে কিছু মাইএসকিউএল সংস্করণ) কার্যকরভাবে একটি ভ্রচার কলামটি কার্যকরভাবে বাতিল করার প্রোগ্রামগুলি তাত্ক্ষণিকভাবে প্রোগ্রামগুলি ত্রুটিবিহীনভাবে লক্ষ্য করা ছাড়াই রয়েছে: এর আকারটি কমিয়ে দেবে 0 এটি এটিকে সাফ করে দেবে, এবং লিখিতভাবে লিখিত কিছু বাতিল করে দেবে silent এটি ...
রেক্যান্ডবোনম্যান

2

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

আপনি একক ব্যবহারকারীর পরিবর্তে একটি ডাটাবেস ভূমিকা ব্যবহার করতে পারেন।

অবশ্যই আপনি নিজের সীমিত ব্যবহারকারীর ডিবিও-মালিকানাধীন সঞ্চিত পদ্ধতিতে টেবিল কাটা করতে সক্ষম করতে পারেন:

create procedure truncate_t 
with execute as owner
as
begin
  truncate table t;
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.