এসকিউএল সার্ভার: কোনও ব্যবহারকারীর পক্ষে তার সারণিতে নয় এমন দৃশ্যে নির্বাচিত অ্যাক্সেসের অনুমতি দিন


11

আমার কয়েকটি ডাটাবেস সহ একটি এসকিউএল সার্ভার 2012 উদাহরণ রয়েছে। এর মধ্যে একটিতে আমি একটি ভিউ তৈরি করেছি, যা ডাটাবেসের চেয়ে বেশি টেবিল নির্বাচন করে।

আমি চাই যে কোনও ব্যবহারকারী সেই দৃশ্যটি নির্বাচন করতে সক্ষম হোক তবে এটির সারণীগুলি নির্বাচন করা উচিত নয়। ব্যবহারকারীটি টেবিলগুলি নির্বাচন করতে না পারার কারণটি তৈরি করা হয়েছিল।

আমি /programming/368414/grant-select-on-a-view-not-base-table এবং http://msdn.microsoft.com/en-us/library/ms188676 পড়েছি । aspx এবং এখনও এটি কাজ করছে না।

আমি যদি GRANT SELECT TABLE TO USERসমস্ত টেবিলগুলিতে একটি করি তবে ব্যবহারকারী দর্শনটি নির্বাচন করতে সক্ষম। তবে আমি যদি কোনও টেবিলে প্রত্যাহার করি তবে এটি ব্যর্থ হয়।

এটি করার একটি সহজ পদ্ধতি হওয়া উচিত তবে এটি কার্যকর করতে আমার সমস্যা হচ্ছে। আমি এর আগে ঘটতে দেখেছি (একটি উদাহরণের মালিক আমাকে একটি দৃশ্যে অ্যাক্সেস দিয়েছিলেন এবং এটির টেবিলগুলিতে এটি করেননি) তবে আমি এটি করতে পারিনি বা কীভাবে জানে এমন কাউকে খুঁজে পাচ্ছি না।

কেউ আমাকে কীভাবে এটি করতে পারে তার একটি টিউটোরিয়াল বা একটি কোড উদাহরণ সরবরাহ করতে পারেন?


যখন ব্যবহারকারী SELECTsদেখুন আমি বার্তাটি পাই:

বস্তু <TABLE>, ডাটাবেস <DB>, স্কিমাতে SELECT অনুমতি অস্বীকার করা হয়েছিল dbo

যদি আমি সেই টেবিলটিতে নির্বাচন করা মঞ্জুর করি, ত্রুটি বার্তাটি সারণির নামটি ভিউটি পড়ার অন্য টেবিলে পরিবর্তন করে।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট 9

উত্তর:


21

আপনি যদি ব্যবহারকারীদের ভিউ থেকে নির্বাচন করতে চান তবে আপনি কেন টেবিলটিতে অনুদান দিচ্ছেন? "প্রত্যাহার" দ্বারা আপনি কি বোঝাতে চান স্পষ্টভাবে প্রত্যাখ্যান / অস্বীকার করবেন? অস্বীকার অনুদান ওভাররাইড করবে তাই আপনার সমস্যা আছে ... আপনার ভিউতে অনুদান যোগ করে এবং টেবিলগুলিতে কোনও উপায়ে কিছু না করে আপনি এটি সম্পাদন করতে সক্ষম হবেন ।

এখানে একটি চটজলদি উদাহরণ রয়েছে যেখানে SELECTস্পষ্টভাবে টেবিলটিতে মঞ্জুর করা হয়নি, তবে দেখা হয়েছে। ব্যবহারকারী ভিউ থেকে নির্বাচন করতে পারেন তবে টেবিলটি নয়।

CREATE USER foo WITHOUT LOGIN;
GO
CREATE TABLE dbo.a(id INT);
CREATE TABLE dbo.b(id INT);
GO
CREATE VIEW dbo.v 
AS 
  SELECT a.id FROM a INNER JOIN b ON a.id = b.id;
GO
GRANT SELECT ON dbo.v TO foo;
GO
EXECUTE AS USER = N'foo';
GO
-- works:
SELECT id FROM dbo.v;
GO
-- Msg 229, SELECT denied:
SELECT id FROM dbo.a;
GO
REVERT;

মনে রাখবেন যে এই ধারণাটি fooস্কিমা বা ডাটাবেসে সুস্পষ্ট অনুমতিগুলির মাধ্যমে বা ভূমিকা বা গোষ্ঠী সদস্যতার মাধ্যমে উন্নততর সুযোগ-সুবিধা প্রদান করা হয়নি।

যেহেতু আপনি একাধিক ডাটাবেসে টেবিল ব্যবহার করছেন (দুঃখিত আমি প্রথম প্রথম বাক্যটির শেষটি মিস করেছি), তাই আপনার ডাটাবেসে টেবিলে স্পষ্ট অনুদানের প্রয়োজন হতে পারে যেখানে দৃশ্যটি বিদ্যমান নেই। টেবিল (গুলি) এ নির্বাচন করা মঞ্জুরি এড়াতে, আপনি প্রতিটি ডাটাবেসে একটি ভিউ তৈরি করতে পারেন এবং তারপরে দর্শনগুলিতে যোগ দিতে পারেন।

দুটি ডাটাবেস এবং একটি লগইন তৈরি করুন:

CREATE DATABASE d1;
GO
CREATE DATABASE d2;
GO
USE [master];
GO
CREATE LOGIN blat WITH PASSWORD = 'x', CHECK_POLICY = OFF;
GO

ডাটাবেসে d1, একটি ব্যবহারকারী তৈরি করুন, তারপরে একটি টেবিল তৈরি করুন এবং সেই টেবিলের বিপরীতে একটি সহজ দর্শন। গ্রাহককে কেবলমাত্র দর্শনের বিপরীতে নির্বাচন করুন :

USE d1;
GO
CREATE USER blat FROM LOGIN blat;
GO
CREATE TABLE dbo.t1(id INT);
GO
CREATE VIEW dbo.v1
AS
  SELECT id FROM dbo.t1;
GO
GRANT SELECT ON dbo.v1 TO blat;
GO

এখন, দ্বিতীয় ডাটাবেসে, ব্যবহারকারী তৈরি করুন, তারপরে অন্য টেবিল এবং একটি ভিউ তৈরি করুন যা সেই টেবিলটির সাথে ভিউতে যুক্ত হবে d1। মঞ্জুরি শুধুমাত্র দেখার জন্য নির্বাচন করুন।

USE d2;
GO
CREATE USER blat FROM LOGIN blat;
GO
CREATE TABLE dbo.t2(id INT);
GO
CREATE VIEW dbo.v2
AS
  SELECT v1.id FROM dbo.t2 
    INNER JOIN d1.dbo.v1 AS v1
    ON t2.id = v1.id;
GO
GRANT SELECT ON dbo.v2 TO blat;
GO

এখন একটি নতুন ক্যোয়ারী উইন্ডো চালু করুন এবং লগইন হওয়ার জন্য শংসাপত্রগুলি পরিবর্তন করুন blat( EXECUTE ASএখানে কাজ করে না)। তারপরে দুটি ডাটাবেসের প্রসঙ্গ থেকে নিম্নলিখিতটি চালান, এবং এটি ভাল কাজ করা উচিত:

SELECT id FROM d1.dbo.v2;

এটি উভয়ই এমএসজি 229 ত্রুটি উত্পন্ন করতে হবে:

SELECT id FROM d1.dbo.t1;
GO
SELECT id FROM d2.dbo.t2;

ফলাফল:

এমএসজি 229, স্তর 14, রাজ্য 5, লাইন 1
বস্তুর 't1', ডাটাবেস 'ডি 1', স্কিমা 'ডিবিও' তে SELECT অনুমতি অস্বীকার করা হয়েছিল।
এমএসজি 229, স্তর 14, রাজ্য 5, লাইন 3
অবধি 'টি 2', ডাটাবেস 'ডি 2', স্কিমা 'ডিবিও' তে SELECT অনুমতি অস্বীকার করা হয়েছিল।


1

সম্প্রদায় উইকির উত্তরটি মূলত এর লেখকের প্রশ্নের সাথে যুক্ত হয়েছে:

এটি আমিই করেছি:

  1. এতে সমস্ত সারণীতে যোগদান করে ডিবি এ-তে একটি দৃশ্য তৈরি করেছে।
  2. মঞ্জুর SELECTতার টেবিল কোন যে দৃশ্য ব্যবহারকারী অ্যাক্সেস, এবং। ব্যবহারকারী সাফল্যের সাথে সারণীগুলি না দেখে দর্শনটি জিজ্ঞাসা করতে সক্ষম হয়েছিল।
  3. ডিবি বিতে একটি ভিউ তৈরি করেছেন, ডিবি এ-এর সাথে এই ডিবিতে সারণীগুলিতে যোগদান করুন
  4. মঞ্জুর SELECTনয় এমন যেকোনো টেবিলে এই দ্বিতীয় দৃশ্য ব্যবহারকারী অ্যাক্সেস, এবং এছাড়াও। ব্যবহারকারী সফলভাবে এই চূড়ান্ত দর্শনটি দেখতে এবং ডেটা দেখতে সক্ষম হয়েছিল।

আমি মনে করি এটির মতামত একটি ভিউর তার ডিবিতে সারণীগুলি জিজ্ঞাসা করতে সক্ষম হয়েছে যে ব্যবহারকারীর সরাসরি অ্যাক্সেস নেই তবে অন্য ডিবি থেকে টেবিলগুলিতে এটি করতে অক্ষম। অন্তত এটি কাজ করে।


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