ডাটাবেসে সমস্ত সঞ্চিত পদ্ধতিতে কোনও ব্যবহারকারীর জন্য সম্পাদনের অনুমতি প্রদান করুন?


107

আমি পুরানো ডাটাবেস থেকে স্ক্রিপ্ট তৈরি করেছি, একটি নতুন ডাটাবেস তৈরি করেছি এবং পুরাতন ডাটাবেস থেকে সমস্ত ডেটা আমদানি করেছি। এখনও পর্যন্ত খুব ভাল, তবে, কোনও ব্যবহারকারীর সঞ্চিত পদ্ধতিগুলির অধিকার সম্পাদন করেনি। আমি জানি আমি ব্যবহার করতে পারি

GRANT EXECUTE ON [storedProcName] TO [userName] 

তবে এটি যদি কেবল কয়েকটি পদ্ধতি ছিল তবে আমার কাছে প্রায় 100 টি আছে তবে নির্দিষ্ট ব্যবহারকারীর জন্য তাদের সকলের জন্য এক্সিকিউট এক্সেস দেওয়ার আমার পক্ষে সহজতম উপায় কী?

আগাম ধন্যবাদ.

উত্তর:


118

একটি ভূমিকা তৈরি করুন ব্যবহারকারীদের সাথে এই ভূমিকা যুক্ত করুন এবং তারপরে আপনি এই রোলটিতে সমস্ত রুটিনগুলিকে এক শটে কার্যকর করতে মঞ্জুর করতে পারেন।

CREATE ROLE <abc>
GRANT EXECUTE TO <abc>

সম্পাদনা
এটি এসকিউএল সার্ভার ২০০ in- এ কাজ করে, আমি এই বৈশিষ্ট্যের পশ্চাদপদ সামঞ্জস্যতা সম্পর্কে নিশ্চিত নই, আমি নিশ্চিত যে 2005 এর পরে কোনও কিছু ঠিকঠাক হওয়া উচিত।


আমি এটি এসকিউএল সার্ভার ২০০ স্ট্যান্ডার্ড (অ্যামাজন আরডিএস) এ চেষ্টা করেছি এবং এটি একটি কবজির মতো কাজ করেছে।
ডেটাগোড

আপনি একটি উদাহরণ প্রদান করতে পারেন? আসুন বলতে পারি যে SPExecuter
Uri

4
কেবলমাত্র অন্য বিবৃতিটির প্রয়োজন হ'ল লাইনটি ব্যবহারকারীকে ভূমিকায় যুক্ত করা, যেমন: ALTER ভূমিকা [abc] সদস্য যোগ করুন সদস্য [ব্যবহারকারী নাম]
ধোচি

জনসাধারণের কাছে অনুদানের চেষ্টা করুন
সাইমন হিউজেস

28
আপনার আসলে কোনও ভূমিকা তৈরি করার দরকার নেই, আপনি এটি সরাসরি কোনও ব্যবহারকারীর জন্য প্রয়োগ করতে পারেন, যেমন ব্যবহারকারীনামকে অনুদান প্রদান করুন। আমি মনে করি এটি ওপি-র প্রশ্নের পক্ষে যথেষ্ট।
ক্রিস ময়ূর

28

সমস্যার অতিরিক্ত জটিলতা ছাড়াই বাছাই করা ডাটাবেসে এক্সিকিউটি প্রদানের জন্য:

USE [DB]
GRANT EXEC TO [User_Name];

4
আমার জন্য কাজ করেছে এবং সম্ভবত প্রতিটি সঞ্চিত প্রকোপের নামের স্ক্রিপ্টগুলির পরিবর্তে ভবিষ্যতের সমস্ত সঞ্চিত প্রোসগুলি (আমরা এটি আবিষ্কার করব) কভার করে।
কেন ফোর্স্লুন্ড

19

এটি একটি সমাধান যা এর অর্থ হ'ল আপনি স্কিমাতে নতুন সঞ্চিত পদ্ধতি যুক্ত করার সাথে সাথে ব্যবহারকারীরা নতুন সঞ্চিত পদ্ধতিতে অনুদানের আহ্বান না করেই এগুলি কার্যকর করতে পারেন:

IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
DROP USER asp_net
GO

IF  EXISTS (SELECT * FROM sys.database_principals 
WHERE name = N'db_execproc' AND type = 'R')
DROP ROLE [db_execproc]
GO

--Create a database role....
CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
GO

--...with EXECUTE permission at the schema level...
GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
GO

--http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
--Any stored procedures that are created in the dbo schema can be 
--executed by users who are members of the db_execproc database role

--...add a user e.g. for the NETWORK SERVICE login that asp.net uses
CREATE USER asp_net 
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] 
WITH DEFAULT_SCHEMA=[dbo]
GO

--...and add them to the roles you need
EXEC sp_addrolemember N'db_execproc', 'asp_net';
EXEC sp_addrolemember N'db_datareader', 'asp_net';
EXEC sp_addrolemember N'db_datawriter', 'asp_net';
GO

তথ্যসূত্র: সমস্ত সঞ্চিত পদ্ধতিতে অনুমতি প্রদান করান


6

কোডের নীচে ব্যবহার করুন, সঠিক ডাটাবেসের নাম এবং ব্যবহারকারীর নাম পরিবর্তন করুন এবং তারপরে এই আউটপুটটি গ্রহণ করুন এবং এসএসএমএসে কার্যকর করুন। এসকিউএল 2005 এর উপরে

USE <database_name> 
select 'GRANT EXECUTE ON ['+name+'] TO [userName]  '  
from sys.objects  
where type ='P' 
and is_ms_shipped = 0  

4
সিএলআর সঞ্চিত পদ্ধতি অন্তর্ভুক্ত করতে আপনাকে 'পিসি' প্রকারের অন্তর্ভুক্ত করতে হবে।
ওলেহ নেচেটিইলো

1
USE [DATABASE]

DECLARE @USERNAME VARCHAR(500)

DECLARE @STRSQL NVARCHAR(MAX)

SET @USERNAME='[USERNAME] '
SET @STRSQL=''

select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'+@USERNAME+';'
from
    sys.all_objects as obj
inner join
    sys.schemas s ON obj.schema_id = s.schema_id
where obj.type in ('P','V','FK')
AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')


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