db_ddladmin बनाम db_owner
जो मैंने परीक्षण किया और जिस पर पढ़ा, उससे मैं बता सकता हूं कि अधिकांश भाग के लिए आपकी सूची सटीक दिखती है, केवल db_ddladmin
डीईईएस आपको अनुमति नहीं देता है CREATE SCHEMA
। मैंने पुष्टि की कि आपके द्वारा सूचीबद्ध अन्य सुरक्षा अनुमतियाँ वास्तव में अस्वीकृत थीं।
केवल DDLADMIN के साथ अस्वीकृत:
[ALTER ANY USER]
[BACKUP DATABASE]
, [BACKUP LOG]
,[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
, [ALTER ANY ROLE]
[DROP DATABASE]
यह देखते हुए कि। । ।
db_datareader
SELECT
सभी तालिकाओं तक पहुंच की अनुमति देगा
db_datarwriter
अनुमति देगा INSERT
, UPDATE
और DELETE
सभी तालिकाओं तक पहुँच देगा
db_executor
EXECUTE
सभी निष्पादन योग्य वस्तुओं तक पहुंच की अनुमति देगा
Additonally, db_ddladmin भूमिका अनुमतियाँ होने का मतलब हो सकता है। । ।
नोट: चूंकि आपके पास 2005 - 2014 से SQL सर्वर के इतने अलग-अलग संस्करण हैं, इसलिए यह शुरू करने के लिए उपयोगकर्ताओं के एक छोटे से सेट का परीक्षण करना सबसे अच्छा हो सकता है, यह देखने के लिए कि कौन किसी भी किंक आदि को बाहर करने के लिए चिल्लाता है।
यदि वे इस भूमिका के मालिक हैं, तो वे डीबीओ के स्वामित्व में नहीं होंगे, इसलिए आपको स्वामित्व जप के मुद्दों से निपटना पड़ सकता है, यदि इस स्तर पर कभी किसी चीज की समस्या है। मैं 100% निश्चित नहीं हूं कि यह एक समस्या होगी लेकिन यह सिर्फ मामले में उल्लेख के लायक है।
स्रोत: स्वामित्व जंजीरों
इस भूमिका के साथ (एसक्यूएल सर्वर के संस्करण के आधार पर भिन्न हो सकते हैं) वे वर्तमान डीबी में परिभाषित एसक्यूएल सुरक्षा सिद्धांतों को उन वस्तुओं में जोड़ने में सक्षम हो सकते हैं जो अभी भी उनके पास हैं , न कि सभी ऑब्जेक्ट्स (जिनके पास वे स्वयं नहीं हैं) और न ही एक नया सर्वर जोड़ें -लेवल परिभाषित प्रिंसिपल को DB स्तर पर।
इसके अतिरिक्त, DBO भूमिका की अनुमति नहीं होने का मतलब हो सकता है। । ।
नोट: चूंकि आपके पास 2005 - 2014 से SQL सर्वर के इतने अलग-अलग संस्करण हैं, इसलिए यह शुरू करने के लिए उपयोगकर्ताओं के एक छोटे से सेट का परीक्षण करना सबसे अच्छा हो सकता है, यह देखने के लिए कि कौन किसी भी किंक आदि को बाहर करने के लिए चिल्लाता है।
DBO की भूमिका नहीं होने से कुछ SSMS डिज़ाइनर GUI इंटरफेस (SQL सर्वर संस्करण अलग-अलग) को बिना किसी त्रुटि के पॉप्युलेट या ओपन करने से रोका जा सकता है (उदाहरण के लिए GUI के माध्यम से टेबल या कॉलम को संशोधित करते हुए) भले ही यह T-SQL कार्यों और अनुमतियों के माध्यम से हो। । SQL सर्वर के कुछ संस्करणों में GRANT VIEW DEFINITION
जहां यह एक समस्या है, यह अनुमति देकर हल किया जा सकता है और यह केवल SQL सर्वर के कुछ संस्करणों पर चेतावनी भी हो सकती है।
साधन
आप डेटाबेस के स्वामी या db_owner भूमिका के सदस्य के रूप में लॉग इन नहीं होते हैं। आप उन तालिकाओं में परिवर्तन नहीं बचा पाएंगे जो आपके पास नहीं हैं।
db_ddladmin भूमिका SSMS में "डिज़ाइन" फ़ंक्शन के उपयोग की अनुमति नहीं देती है
"हम अपने क्यूए डेटाबेस में उपयोगकर्ताओं / डेवलपर्स डीबीओ को जितना हो सके, देने से रोकने की कोशिश करते हैं। इसके साथ समस्याओं में से एक यह है कि उन्हें अभी भी डेटाबेस टेबल जैसे उपयोगकर्ता टेबल बनाने और संशोधित करने में सक्षम होने की आवश्यकता है। कई देव नए हैं। MS SQL और इस तरह से इस तरह के काम के लिए GUI (SSMS) से चिपके रहते हैं। समस्या तब उत्पन्न होती है जब हम उन्हें db_ddladmin (dbo नहीं) प्रदान करते हैं और वे तालिका डिज़ाइनर GUI के माध्यम से तालिकाओं या स्तंभों को संशोधित करने में सक्षम नहीं होते हैं। उन्हें TSQL कमांड और उनके सिंटैक्स को सीखने के लिए अतिरिक्त समय लेना पड़ता है (ताकि उन्हें फिर कभी ज़रूरत न हो) या डीबीए टीम को संलग्न करें जो हमारी अन्य गतिविधियों से समय लेता है।
मुझे नहीं पता कि यह बग या फीचर अनुरोध है, लेकिन मैं इसे बग मानता हूं क्योंकि उपयोगकर्ता के पास TSQL के माध्यम से तालिका को बदलने की पर्याप्त अनुमति है लेकिन जीयूआई उन्हें संदेश देता है:
" आप डेटाबेस के स्वामी या सिस्टम व्यवस्थापक के रूप में लॉग ऑन नहीं हैं। आप उन तालिकाओं में परिवर्तन सहेजने में सक्षम नहीं हो सकते हैं जो आपके पास नहीं हैं।" और "तालिका [schema].[table]
केवल पढ़ने के लिए सेट की गई है, इस तालिका में उपयोगकर्ता के पास पर्याप्त अधिकार नहीं हैं। "
एक ट्रेस चेक को एक is_member ('db_owner') होने की ओर इशारा करता है, जो db_ddladmin के सदस्यों को शामिल नहीं करेगा, भले ही उनके पास वास्तव में ऑब्जेक्ट को संशोधित करने की अनुमति हो। Microsoft SQL सर्वर प्रबंधन स्टूडियो "
एजेंट डीबीए द्वारा 1/25/2010 को 7:06 बजे पोस्ट किया गया
मेरे पास एक समान मुद्दा था और निम्नलिखित अनुदान प्रदर्शन करके इसे हल करने में कामयाब रहा
GRANT view definition on schema:: <schemaname> to <username>
अन्य बातें
चूंकि आप कहते हैं कि इस मामले की समीक्षा केस-बाय-केस आधार पर की जा रही है
वर्तमान में सीमित अनुमतियों में से एक db_owner अनुमतियाँ है।
इस अनुमति की समीक्षा केस-बाय-केस आधार पर की जा रही है, लेकिन db_owner अनुमतियों को निम्न के साथ बदलना एक सामान्य परिवर्तन है:
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
क्या आपने "सभी ऑब्जेक्ट" डीबी-स्तरीय पहुंच के लिए अतिरिक्त कस्टम भूमिकाएं बनाने पर विचार किया है जो प्रत्येक व्यक्ति को उन्हें देने के बजाय आवश्यक है db_ddladmin
भूमिका क्योंकि संभवतः उन्हें डीबी स्तर की वस्तुओं के साथ-साथ उन्हें और भी अधिक आवश्यकता होगी।
मैं आमतौर पर वही देता हूं जो उनके काम करने के लिए वास्तव में और कुछ भी नहीं है और अगर किसी डीबी में सभी वस्तुओं तक डीबी स्तर की वस्तु पहुंच के लिए "सामान्य" या "मानक" की आवश्यकता है, तो मैं एक कस्टम डीबी भूमिका की तरह बनाता हूं db_executor
लेकिन मेरे नीचे उदाहरण देखें। इस तरह से आप लोगों को वे प्रदान कर सकते हैं जो उन्हें किसी विशेष डीबी में वास्तव में सभी डीबी ऑब्जेक्ट की आवश्यकता होती है यदि आपको अपनी सुरक्षा के लिए अपने डीबी में ऑब्जेक्ट स्तर स्पष्ट नहीं मिल रहा है।
----Custom Database Roles
/* CREATE A NEW ROLE -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute
/* CREATE A NEW ROLE -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter
/* CREATE A NEW ROLE -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View
/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO
/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema
मैं एक db_DDLAdmin_Restriction भूमिका भी साझा करना चाहता था जिसे आप बनाने पर विचार करना चाहते हैं अन्यथा स्पष्ट रूप DENY
से प्रतिबंधित कर सकते हैं कि क्या db_ddladmin
पहुँच प्रदान करें ताकि आप कम से कम DBs पर इसे बना सकें जहाँ आप उन्हें यह भूमिका प्रदान करते हैं और DENY
वास्तविक ऑब्जेक्ट प्रकारों के लिए स्पष्ट सेट करते हैं , आदि तुम उन्हें करने के लिए उपयोग नहीं करना चाहते हैं।
उदाहरण के लिए, यदि आप जानते हैं वे निश्चित रूप से संग्रहित प्रक्रियाओं और कार्यों बनाने हो, आप निकाल सकते हैं होगा DENY CREATE FUNCTION
, DENY CREATE PROCEDURE
, DENY ALTER ANY SCHEMA
।
---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY CHECKPOINT TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE TO db_DDLAdmin_Restriction
DENY CREATE QUEUE TO db_DDLAdmin_Restriction
DENY CREATE RULE TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM TO db_DDLAdmin_Restriction
DENY CREATE TABLE TO db_DDLAdmin_Restriction
DENY CREATE TYPE TO db_DDLAdmin_Restriction
DENY CREATE VIEW TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_DDLAdmin_Restriction
DENY REFERENCES TO db_DDLAdmin_Restriction
GO