کنترل دسترسی برای کاربران و نقشها در SQL

امنیت برای مدیران پایگاه داده اهمیت دارد و به دنبال حفاظت از گیگابایت های خود از اطلاعات کسب و کار حیاتی از چشم چشم پوشی از افراد غیر مجاز غیر مجاز و خودی ها تلاش می کنند که از قدرت خود فراتر رود. تمام سیستم های مدیریت پایگاه داده رابطه ای ، نوعی ساز و کارهای امنیتی ذاتی را طراحی می کنند تا به حداقل رساندن این تهدیدات کمک کنند. آنها از حفاظت از رمز عبور ساده ارائه شده توسط مایکروسافت دسترسی به ساختار پیچیده کاربر / نقش پشتیبانی شده توسط پایگاه های داده های پیشرفته ریاضی مانند اوراکل و مایکروسافت SQL سرور متغیر است. این مقاله بر روی سازوکارهای امنیتی مشترک است که برای همه پایگاه های داده ای که زبان Query Language Structured Query (یا SQL ) را اجرا می کنند، تمرکز دارد. با هم، ما از طریق تقویت کنترل دسترسی به داده ها و اطمینان از ایمنی داده های شما پیاده خواهیم شد.

کاربران

پایگاه داده های مبتنی بر سرور همه از یک مفهوم کاربر مشابه با آنچه در سیستم عامل های کامپیوتری استفاده می شود پشتیبانی می کند. اگر شما با سلسله مراتب کاربر / گروه در مایکروسافت ویندوز NT و ویندوز 2000 آشنا هستید، می بینید که گروه های کاربری / نقش پشتیبانی شده توسط SQL Server و Oracle بسیار شبیه هستند.

به شدت توصیه می شود که حساب های کاربر پایگاه داده شخصی خود را برای هر شخصی که دسترسی به پایگاه داده خود را ایجاد می کنید ایجاد کنید. از لحاظ فنی امکان اشتراک دادن حساب بین کاربران یا صرفا استفاده از یک حساب کاربری برای هر نوع کاربر که نیاز به دسترسی به پایگاه داده خود را دارد، اما من به شدت از این دو مورد دلسرد شده ام. اولا، پاسخگویی فردی را از بین می برد-اگر یک کاربر تغییری در پایگاه داده شما (بیایید بگوییم با دادن 5000 دلار افزایش)، شما نمی توانید آن را با استفاده از مجلات حسابرسی به فرد خاصی ردیابی کنید. علاوه بر این، اگر یک کاربر خاص از سازمان خود خارج شود و شما مایل به دسترسی خود را از پایگاه داده حذف کنید، مجبور خواهید شد که رمز عبور را که همه کاربران به آن اعتماد دارند تغییر دهید.

روش ایجاد حساب های کاربری از پلت فرم به پلت فرم متفاوت است و شما باید مستندات خاص DBMS خود را برای روش دقیق مشورت کنید. کاربران مایکروسافت SQL Server باید استفاده از روش ذخیره شده sp_adduser را بررسی کنند. مدیران پایگاه داده اوراکل دستور CREATE USER را مفید خواهد یافت. همچنین ممکن است بخواهید طرحهای احراز هویت جایگزین را بررسی کنید. به عنوان مثال، Microsoft SQL Server از استفاده از ویندوز NT یکپارچه امنیت پشتیبانی می کند. تحت این طرح، کاربران توسط حساب های کاربری ویندوز NT خود به پایگاه داده شناسایی می شوند و برای ورود به یک شناسه کاربری اضافی و رمز عبور برای دسترسی به پایگاه داده مجبور نیستند. این رویکرد در بین مدیران پایگاه داده بسیار محبوب است؛ زیرا بار مدیریت حساب را به کارمندان مدیریت شبکه تغییر می دهد و سهولت ورود به سیستم را به کاربر نهایی فراهم می کند.

نقش ها

اگر شما در محیطی با تعداد کمی از کاربران هستید، احتمالا خواهید دید که ایجاد حساب های کاربری و اعطای مجوز به طور مستقیم به آنها برای نیازهای شما کافی است. با این حال، اگر تعداد زیادی از کاربران را داشته باشید، به احتمال زیاد به دلیل نگهداری حساب ها و مجوزهای مناسب، به احتمال زیاد از آن غافل خواهید شد. برای کاهش این بار، پایگاه های اطلاعاتی رابطه ای از مفهوم نقش ها حمایت می کنند. نقش بانک اطلاعاتی به طور مشابه به گروه های ویندوز NT عمل می کند. حساب های کاربری به نقش (ها) اعطا می شوند و سپس مجوزها به عنوان یک کل به جای حساب های کاربری فرد اختصاص می یابد. برای مثال، ما می توانیم یک نقش DBA ایجاد کنیم و سپس حساب های کاربری کارکنان اداریمان را برای این نقش اضافه کنیم. هنگامی که این کار را انجام دادیم، می توانیم به سادگی اجازه دادن به نقش را مجاز به اختصاص یک مجوز خاص برای همه مدیران کنونی (و آینده) کنیم. یک بار دیگر، روش ایجاد نقش ها از پلت فرم به پلت فرم متفاوت است. مدیران MS SQL Server باید روش ذخیره شده sp_addrole را بررسی کنند در حالی که DBAs اوراکل باید از نحو CREATE ROLE استفاده کنند.

اعطای مجوز

اکنون که ما کاربران را به پایگاه داده خود اضافه کردیم، زمان لازم برای تقویت امنیت با افزودن مجوزهاست. اولین گام ما برای اعطای مجوزهای مناسب پایگاه داده به کاربران ما است. ما این را با استفاده از بیانیه SQL GRANT انجام خواهیم داد.

در اینجا نحو بیان آمده است:

GRANT <مجوزها>
[ON

]
به <کاربر / نقش>
[با گزینه گانت]

در حال حاضر، بیایید نگاهی به این بیانیه به صورت خطی ببینیم. خط اول، GRANT <مجوزها>، به ما اجازه می دهد که مجوز های جدول خاصی که ما اعطا می کنیم مشخص کنیم. اینها می توانند مجوزهای جدول (مانند SELECT، INSERT، UPDATE و DELETE) یا مجوزهای پایگاه داده (مانند CREATE TABLE، ALTER DATABASE و GRANT) باشند. بیش از یک مجوز میتواند در یک بیانیه واحد GRANT اعطا شود، اما مجوزهای سطح جدول و مجوزهای سطح پایگاه داده ممکن است در یک بیانیه واحد ترکیب شوند.

خط دوم، ON

، برای مشخص کردن جدول آسیب پذیر برای مجوزهای سطح جدول مورد استفاده قرار می گیرد. این خط حذف شده است اگر ما اعطای مجوزهای سطح پایگاه داده هستیم. خط سوم مشخص کننده کاربر یا نقش مجوز است.

در نهایت، خط چهارم، با OPTION GRANT، اختیاری است. اگر این خط در بیانیه گنجانده شده باشد، کاربر متاثر شده نیز مجاز است که این مجوزها را به سایر کاربران اعطا کند. توجه داشته باشید که با گزینه GRANT OPTION نمی توان مشخص کرد که مجوزها برای نقش تعیین شده اند.

مثال ها

بیایید به چند نمونه نگاه کنیم. در اولین سناریو ما اخیرا یک گروه از 42 اپراتور ورودی را استخدام کرده ایم که اضافه کردن و حفظ سوابق مشتری می شود. آنها باید بتوانند به اطلاعات در جدول مشتریان دسترسی داشته باشند، این اطلاعات را تغییر دهند و سوابق جدیدی را به جدول اضافه کنند. آنها نباید بتوانند یک رکورد را از پایگاه داده حذف کنند. اول، ما باید حساب کاربری برای هر اپراتور ایجاد کنیم و سپس همه آنها را به یک نقش جدید، DataEntry اضافه کنیم. بعد، ما باید از دستور زیر SQL برای اعطای مجوز مناسب استفاده کنیم:

GRANT SELECT، INSERT، UPDATE
ON مشتریان
به DataEntry

و این همه آن است که وجود دارد! حالا بیایید یک مورد را بررسی کنیم که در آن مجوزهای مربوط به سطح پایگاه داده را اختصاص میدهیم. ما می خواهیم اجازه دهیم اعضای نقش DBA جدول های جدیدی را به پایگاه داده اضافه کنیم. علاوه بر این، ما می خواهیم آنها بتوانند مجوز سایر کاربران را مجاز به انجام یکسان کنند. بیانیه SQL:

GRANT CREATE TABLE
به DBA
با گزینه گانت

توجه داشته باشید که ما از خط با GRANT OPTION گنجانده شده است تا اطمینان حاصل شود که DBA های ما می توانند این مجوز را به دیگر کاربران اختصاص دهند.

حذف مجوزها

هنگامی که مجوزها را اعطا می کنیم، اغلب لازم است آنها را در تاریخ بعد لغو کنیم. خوشبختانه SQL دستورات REVOKE را برای حذف مجوزهای قبلا اعطا کرده است. در اینجا نحو است:

REVOKE [اختیار دادن برای] <مجوزها>
ON


از <کاربر / نقش>

متوجه خواهید شد که نحو این فرمان شبیه دستور دستور GRANT است. تنها تفاوت این است که با گزینه GRANT OPTION در خط فرمان REVOKE مشخص می شود و نه در انتهای فرمان. به عنوان مثال، بیایید تصور کنیم که می خواهیم مجوز قبلا مجوز مری را برای حذف سوابق از پایگاه داده مشتریان لغو کنیم. ما از دستور زیر استفاده می کنیم:

لغو حذف
ON مشتریان
از مریم

و این همه آن است که وجود دارد! یک مکانیسم اضافی توسط مایکروسافت SQL سرور پشتیبانی می کند که قابل توجه است - فرمان DENY. این فرمان را می توان مورد استفاده قرار داد تا به صراحت اجازه دسترسی به یک کاربر را که ممکن است از طریق عضویت فعلی یا آینده نقش داشته باشد، رد کند. در اینجا نحو است:

DENY <مجوزها>
ON


به <کاربر / نقش

مثال ها

بازگشت به مثال قبلی ما، بیایید تصور کنیم که مری همچنین عضو نقش مدیران بود که همچنین به جدول مشتریان دسترسی داشت. بیانیه قبلی REVOKE کافی برای انکار دسترسی او به جدول نیست. این اجازه را از طریق یک بیانیه GRANT به حساب کاربری کاربر هدایت می کند، اما بر مجوزهای ناشی از عضویت خود در نقش مدیران تاثیر نمی گذارد. با این حال، اگر ما از یک بیانیه DENY استفاده کنیم، میراث او از مجوز را مسدود می کند. دستور زیر است:

حذف شدن
ON مشتریان
به مری

دستور DENY اساسا "مجوز منفی" را در کنترل دسترسی به پایگاه داده ایجاد می کند. اگر بعدا تصمیم به مجوز دادن مری برای حذف ردیف از جدول مشتریان، ما نمی توانیم به سادگی از دستور GRANT استفاده کنیم. این فرمان بلافاصله توسط DENY موجود لغو خواهد شد. در عوض، ابتدا از دستور REVOKE برای حذف مجوز دسترسی منفی به صورت زیر استفاده می کنیم:

لغو حذف
ON مشتریان
از مریم

شما متوجه خواهید شد که این دستور دقیقا همان چیزی است که برای حذف مجوز مثبت استفاده می شود. به یاد داشته باشید که DENY و GRANT هر دو کار را به روش مشابه انجام می دهند؛ آنها هر دو مجوز ها (مثبت یا منفی) را در مکانیزم کنترل دسترسی به پایگاه داده ایجاد می کنند. دستور REVOKE تمام مجوزهای مثبت و منفی را برای کاربر مشخص حذف می کند. هنگامی که این فرمان صادر شد، مری قادر خواهد بود سطرها را از جدول حذف کند، اگر عضو یک نقش باشد که دارای اجازه است. به طور متناوب، یک دستور GRANT می تواند صادر شود تا مجوز DELETE را مستقیما به حساب او ارائه دهد.

در طول این مقاله، شما در مورد مکانیزم کنترل دسترسی پشتیبانی شده توسط Query Language استاندارد آموخته اید. این مقدمه باید نقطه شروع خوبی را برای شما فراهم کند، اما شما را تشویق می کنم که مستندات DBMS خود را برای یادگیری اقدامات امنیتی پیشرفته پشتیبانی شده توسط سیستم شما تشویق کنید. شما متوجه خواهید شد که بسیاری از پایگاه های داده از مکانیزم های پیشرفته تر کنترل دسترسی پشتیبانی می کنند، مانند اعطای مجوز به ستون های خاص.