در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

memoljoon

پروژه امنیت پایگاه داده(کار با role)

با سلام

این پروژه ای درس امنیت پایگاه داده ما هست

من در قسمت ایجاد نقش و مجوز ایراد دارم . تا به حال فقط در حد جدول کار کرده بودم. کسی میتونه بهم بگه چجوری ایجادش کنمو مجوز بدم.

در مورد امنیت هم نمیدونم حتی اگه مقاله باشه و انگلیسی برام کافیه

ممنون میشم راهنمایی کنید تا حالا تجربه کار با نقش رو نداشتم

لینک پروژه

این سوال 2 پاسخ دارد.
#امنیت_پایگاه #پایگاه_داده #پروزه_پایان_ترم
لذت یادگیری با توسینسو
به عنوان شخصی که مدت هاست از سایت توسینسو استفاده می کنم باید بگم که واقعاً یکی از بهترین مرجع ها برای ارتقاء دانش شخصی هست. دوره های سایت، راهکارها و مطالب، همگی عالی هستند.
پارسا صفوی

سلام دوست گرامی

خب ببینید شما توی Sql server (فرض می کنیم که پایگاه داده ی SQL server دارین) می تونید برای هر چیزی دسترسی مشخصی برای تک تک یوزر ها تعیین بکنید که این کار رو می تونید از طریق کلیک راست روی بخش roles در ابجکت مورد نظر انجام بدید. و البته این که در قسمت Security شما می تونید Role های آماده ای تعیین بکنید و به هر آبجکت برای تعدادی یوزر اختصاص بدید. Sql server در این بحث ها خیلی قویه و خیلی میشه راجع بش صحبت کرد و اصلا مبحث ساده و مختصری نیست.

این مقاله میتونه کمکتون بکنه که درک بهتری از Role ها داشته باشید : لینک


ITPRO باشید

حمید ج. فرد

البته همانطور که parsasi گفته شما می توانید از این روش استفاده کنید ولی بنده صورت مساله را خواندم و یک نکته وجود دارد که هر دانشجو یا استاد فقط باید رکوردهای مربوط به خود را ببیند که برای پیاده سازی این روش شما باید از Row Level Security استفاده کنید که این قابلیت در SQL Server 2016 وجود دارد ولی برای پیاده سازی آن در دیگر نسخه های روشهایی هم است. به این صورت که شما باید نام کاربری که وارد سیستم می شود را از طریق تابع User__Name(()) بخوانید و با نام کاربر در جداول مربوطه چک کنید این روش باید از طریق ساختن یک View انجام شود.

با تشکر

Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
memoljoon

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

حالا برای اینکه تست کنم و اون رو به استادم نشون بدم باید لاگین جدید ایجاد کنم و به اون لاگین یک نقش بدم و نشون بدم فقط همون دسترسی ها رو داره. آیا درست هست؟یا اصلا ربطی نداشت.

محمد طارمی

سلام

ببینید اون چیزی که از شما خواستن قسمتیش بر میگرده به قید ها و طراحی جداولتون و بخش دیگش به قسمت سطح دسترسی.

و اما اون چیزی که شما نیاز دارید به این صورته:

شما ابتدا وارد SQl Server بشید(با همان Windows user)

حالا شما 4 تا یوزر می خواهید و 4 تا هم لاگین.

لاگین:به شما امکان میده که فقط وارد محیط SQl Server بشید.

یوزر:به شما امکان میده که به یک یا چند دیتابیس دسترسی داشته باشید.

ابتدا این دستور رو وارد کنید.

CREATE LOGIN Student WITH PASSWORD='1234567'
CREATE USER Student

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

مثلا بتونه Insert کنه یا Update کنه!

حالا تو قدم بعدی با این دستور مشخص می کنیم به کدوم Object دسترسی داشته باشه.(منظورم اینه که به کدوم جدول ، پروسیجر،ویوو و... )

GRANT SELECT ON [Table_Name] TO Student
GRANT UPDATE ON [Table_Name] TO Student

در کد فوق توسط دستور Grant ما می تونیم به یک کاربر اجازه بدیم که بتونه یک یا هر 4 عمل Insert Delete Update /select دسترسی داشته باشه.

باقی کاربرانتون رو هم میتونید از این طریق انجام بدید.

در ضمن این بحث ریزه کاری زیاد داره ولی در همین حد نیاز شما رو جواب میده.

مورد پایانی:

اگر خواستید به کاربری هم اختیار کامل بدهید (یعنی همه کاری بتونه داخل دیتابیس انجام بده) از این کد استفاده کنید.

ALTER ROLE [db_owner] ADD MEMBER [Student]

با این کار شما این این یوزر رو عضو گروه ذکر شده می کنید.

متخصص SQL Server در مباحث: Design & Implement T-SQL Administration Performance&Tuning
  • انتخاب شده به عنوان جواب توسط 1 نفر
محمد طارمی

این هم 2 تا لینک (لینک 1 و لینک 2) مفید برای مطالعه بیشتر.

متخصص SQL Server در مباحث: Design & Implement T-SQL Administration Performance&Tuning
حمید ج. فرد

البته یک موضوع است اینکه هر دانشجو یا استاد میتواند داده دیگر دانشجویان یا استادان را مشاهده و تغییر دهد با روشی که M.T فرمودند. با روشی که بنده اشاره کردم هر کاربری فقط داده خود را میتواند مشاهده کند.

البته روش M.T برای شما که تجربه SQL Server ندارید عالی است.

Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
memoljoon

خیلی از جواب شما ممنون

من مراحل رو انجام دادم و بعد از ایجاد یوزر تونستم برای هر جدول به اون کاربر خاص دسترسی هایی که میخوام رو روی ستون ها بدم اما دو سوال

1- آیا این یوزر همان نقش یا role محسوب می شود.

2- چگونه مثلا حق خواندن رو به یک کاربر بدم که فقط اطلاعات خودش رو ببینه نه همه اطلاعات اون جدول رو چون گفته مثلا یک دانشجو حق خواندن اطلاعات خودش رو دارد. در واقع هر کاربر باید مثلا بر اساس شماره دانشجوی ودش فقط سطر خاص خودش رو ببینه ولی چطوری این رو اعمال می کنیم

محمد طارمی

خیر.

یوزر یا همان کاربر به خودی خود هیچ کاری نمیتونه انجام بده بلکه به واسط نقش هایی که بهش میدیم ،میتونه کار انجام بده.

مثلا مدیر گروه. در اصل اون هم یک کاربره مثل بقیه اشخاص ولی چه چیزی باعث میشه که ما بهش بگیم مدیر گروه؟

در اصل سطح اختیارات این کاربره که باعث میشه یکسری عملیات رو بتونه انجام بده و یکسری رو نتونه.

مثل همون 4 عمل اصلی ای که بهتون معرفی کردم.

متخصص SQL Server در مباحث: Design & Implement T-SQL Administration Performance&Tuning
memoljoon

ببخشید من گیج شدم . حالا باید نقش رو هم جدا ایجاد کنم ؟ بعنی چطور به کاربر نقش میدیم؟ تو قسمت قبل که ما حقوق رو مستقیم به یوزر گرنت کردیم. ما باید نقشها رو ایجاد کنیم و بعد هر کس وارد سیستم میشه بر اساس نقشی که گرفته دسترسی داشته باشه . رابطه بین نقش . کاربر . لاگین برام مفهوم نیست هنوز (ببخشید )

و اینکه یک کاربر بر اساس مشخصات خودش سطر مخصوص به خودش رو ببینه چطور هست؟ با grant دسترسی به کل سطر ها داره و باید فکر می کنم یک پارامتر(مثلا شماره دانشجویی) از کاربر گرفته بشه و فقط اطلاعات همون شناسه رو ببینه

حمید ج. فرد

ﺑﺎﺯﻫﻢ ﺭﺳﻴﺪﻳﺪ ﺑﻪ ﻧﻜﺘﻪ اﻱ ﻛﻪ ﻣﻦ ﮔﻔﺘﻢ. ﺷﻤﺎ ﺑﺎﻳﺪ ﻧﺎﻡ ﻛﺎﺭﺑﺮ ﺭا اﺯ ﺗﺎﺑﻊ user_name ﮔﺮﻓﺘﻪ و ﺑﻌﺪ ﺩﺭ ﻳﻚ view ﺳﻂﺮﻫﺎ ﺭا ﺑﺮ اﺳﺎﺱ ﻧﺎﻡ ﻛﺎﺭﺑﺮ ﻓﻴﻠﺘﺮ ﻛﻨﻴﺪ

Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
memoljoon

پس لاگین برای ورودم به سرور و یوزر برای دسترسی به یک پایگاه داده خاص در اون سرور هست . به عبارت دیگه چون من فقط یک دیتابیس دارم میتونم فقط یک لاگین داشته باشم و بعد چند یوزر مختلف یا اینکه یوزر به لاگین وابسته هست؟(Users are associated with logins in order to grant the appropriate level of access to the desired database resources ) طبق این متن باید وابسته باشه.

پس من باید اول role ایجاد می کردم و به اون ها دسترسی می دادم و بعد به یوزر هم نقش میدادم.

این تابع user_name که گفتین چی هست اگه عنوان مبحث رو هم به انگلیسی بگین خودم سرچ می کنم.

حمید ج. فرد

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

--پایگاه داده را ساخته و در آن یک جدول به نام شاگرد و یک استورد پراسجر به نام شاگرد جدید و یک ویو برای خواندن رکوردها اضافه می کنیم
Create Database University;
Go
Use University;
Go
Create Table Student (FN varchar(20),LN varchar(20),TelephOne varchar(20),Username sysname Default SUSER_NAME());
Go
Create Procedure Insert_Student (@FN varchar(20),@LN varchar(20),@TelephOne varchar(20))
As Begin
	Insert InTo dbo.Student Values (@FN,@LN,@TelephOne,Default);
End
Go
Create View ViewStudents
As Select FN,LN,TelephOne From dbo.Student Where Username = SUser_Name();
Go
-- یک رول پایگاه داده اضافه می کنیم برای مدیریت امنیت پایگاه داده و دسترسی های لازم را به آن می دهیم
Create Role [Student];
Go
Grant Delete On [dbo].[Student] To [Student] With Grant Option 
Go
Grant Insert On [dbo].[Student] To [Student] With Grant Option 
Go
Grant Select On [dbo].[Student] To [Student] With Grant Option 
Go
Grant Update On [dbo].[Student] To [Student] With Grant Option 
Go
Grant Execute On [Insert_Student] To [Student] With Grant Option;
Go
Grant Select On [dbo].ViewStudents To [Student] With Grant Option;
Go
-- دو عدد لاگین ساخته و کاربران مرتبط را هم در کنارش می سازیم
Create Login Hamid With Password = 'Pa$$w0rd';
Go
Create User Hamid For Login Hamid;
Go
Create Login MT With Password = 'Pa$$w0rd';
Go
Create User MT For Login MT;
Go
-- در این قسمت کاربران را به رول ساخته شده اضافه کرده
Alter Role [Student] Add Member [MT];
Go
Alter Role [Student] Add Member [Hamid]
Go

Go
-- در این قسمت کاربر را ایمپرسنیت می کنیم تا با یک اگزکیوشن کانتکتس کاربر دیگر به اس کیو ال دسترسی داشته باشیم
Execute As Login ='Hamid';
Select SUser_Name();

Exec Insert_Student 'Hamid', 'J. Fard','012345566';
Revert;

Execute As Login ='MT';
Select SUser_Name();

Exec Insert_Student 'Mohammad', 'Taromi','012345566';
Revert;

-- View Records
Execute As Login ='Hamid';
Select * From ViewStudents;
Revert

Execute As Login ='MT';
Select * From ViewStudents;
Revert


Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
  • انتخاب شده به عنوان جواب توسط 1 نفر
memoljoon

بسیار ممنون .

مثال بسیار عالی بود.

memoljoon

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

وب سایت توسینسو

چجوری فقط با همین چند صفت اضافه کردن رو باید انجام داد پیغام میده چون روی چند جدول پایه است قابل انجام نیست

حمید ج. فرد

بنده درست متوجه منظورتون نشدم اما برای محدود کردن دسترسی به ستونهای یک چدول از دستور زیر استفاده کنید

Grant Update On [dbo].[Courses] (ExamDate,StartDate) To Master;

البته توجه داشته باشید که Column Level Security بقیه تنظیمات امنیت بر روی آن جدول را دوباره نویسی می کند.

Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
memoljoon

درست منظورم رو نفموندم. البته سوال برای خودم هم ابهام داره. من برای عمل select روی جداول پایه دید تعریف کردم ستون ها رو انتخاب کردم که مشکلی نداره. ولی مثلا برای اجازه اضافه کردن چون بازم گفته روی همین فیلدها می خواستم روی دید عملیات درج رو انجام بدم که پیغام میده باید روی چند جدول پایه انجام بشه و خطا میده. چون نام درس مربوط به جدول دروس هست. نام استاد جدول اساتید و بقیه فیلد ها جدول دروس ارائه شده.

البته شاید من درس پایگاه داده رو فراموش کرده باشم ولی فکر میکنم باید راهی برای انتشار این عملیات ها روی جداول مبنا باشه که من نمیدونم.در واقع من با عملیات روی دید مشکل دارم

حمید ج. فرد

در این صورت شما باید برای ستونهایی که در View نیستند را یک مقدار پیشفرض ارائه دهید. در مورد Updatable View ها هم یک تحقیقی بکنید.

با تشکر

حمید ج. فرد

Microsoft Certified Master: SQL Server 2008 , Microsoft Data Platform MVP
پاسخ شما
برای ارسال پاسخ خود وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....