پروژه امنیت پایگاه داده(کار با role)
با سلام
این پروژه ای درس امنیت پایگاه داده ما هست
من در قسمت ایجاد نقش و مجوز ایراد دارم . تا به حال فقط در حد جدول کار کرده بودم. کسی میتونه بهم بگه چجوری ایجادش کنمو مجوز بدم.
در مورد امنیت هم نمیدونم حتی اگه مقاله باشه و انگلیسی برام کافیه
ممنون میشم راهنمایی کنید تا حالا تجربه کار با نقش رو نداشتم
17 پاسخ
پس لاگین برای ورودم به سرور و یوزر برای دسترسی به یک پایگاه داده خاص در اون سرور هست . به عبارت دیگه چون من فقط یک دیتابیس دارم میتونم فقط یک لاگین داشته باشم و بعد چند یوزر مختلف یا اینکه یوزر به لاگین وابسته هست؟(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
بنده درست متوجه منظورتون نشدم اما برای محدود کردن دسترسی به ستونهای یک چدول از دستور زیر استفاده کنید
Grant Update On [dbo].[Courses] (ExamDate,StartDate) To Master;
البته توجه داشته باشید که Column Level Security بقیه تنظیمات امنیت بر روی آن جدول را دوباره نویسی می کند.
ببخشید دوستا ممنون از پاسخ ها ولی همونطور که گفتم من فقط در حد ساخت جداول با اسکوال آشنایی دارم. پاسخ ها خیلی کلی بودن. اون چیزی که خودم تو ذهنم داره اینه که باید نقش جدید ایجاد کنم . بعد به نقش یکسری مجوز بدم.
حالا برای اینکه تست کنم و اون رو به استادم نشون بدم باید لاگین جدید ایجاد کنم و به اون لاگین یک نقش بدم و نشون بدم فقط همون دسترسی ها رو داره. آیا درست هست؟یا اصلا ربطی نداشت.
البته یک موضوع است اینکه هر دانشجو یا استاد میتواند داده دیگر دانشجویان یا استادان را مشاهده و تغییر دهد با روشی که M.T فرمودند. با روشی که بنده اشاره کردم هر کاربری فقط داده خود را میتواند مشاهده کند.
البته روش M.T برای شما که تجربه SQL Server ندارید عالی است.
ببخشید من گیج شدم . حالا باید نقش رو هم جدا ایجاد کنم ؟ بعنی چطور به کاربر نقش میدیم؟ تو قسمت قبل که ما حقوق رو مستقیم به یوزر گرنت کردیم. ما باید نقشها رو ایجاد کنیم و بعد هر کس وارد سیستم میشه بر اساس نقشی که گرفته دسترسی داشته باشه . رابطه بین نقش . کاربر . لاگین برام مفهوم نیست هنوز (ببخشید )
و اینکه یک کاربر بر اساس مشخصات خودش سطر مخصوص به خودش رو ببینه چطور هست؟ با grant دسترسی به کل سطر ها داره و باید فکر می کنم یک پارامتر(مثلا شماره دانشجویی) از کاربر گرفته بشه و فقط اطلاعات همون شناسه رو ببینه
خیلی از جواب شما ممنون
من مراحل رو انجام دادم و بعد از ایجاد یوزر تونستم برای هر جدول به اون کاربر خاص دسترسی هایی که میخوام رو روی ستون ها بدم اما دو سوال
1- آیا این یوزر همان نقش یا role محسوب می شود.
2- چگونه مثلا حق خواندن رو به یک کاربر بدم که فقط اطلاعات خودش رو ببینه نه همه اطلاعات اون جدول رو چون گفته مثلا یک دانشجو حق خواندن اطلاعات خودش رو دارد. در واقع هر کاربر باید مثلا بر اساس شماره دانشجوی ودش فقط سطر خاص خودش رو ببینه ولی چطوری این رو اعمال می کنیم
سلام دوست گرامی
خب ببینید شما توی Sql server (فرض می کنیم که پایگاه داده ی SQL server دارین) می تونید برای هر چیزی دسترسی مشخصی برای تک تک یوزر ها تعیین بکنید که این کار رو می تونید از طریق کلیک راست روی بخش roles در ابجکت مورد نظر انجام بدید. و البته این که در قسمت Security شما می تونید Role های آماده ای تعیین بکنید و به هر آبجکت برای تعدادی یوزر اختصاص بدید. Sql server در این بحث ها خیلی قویه و خیلی میشه راجع بش صحبت کرد و اصلا مبحث ساده و مختصری نیست.
این مقاله میتونه کمکتون بکنه که درک بهتری از Role ها داشته باشید : لینک
ITPRO باشید
در این صورت شما باید برای ستونهایی که در View نیستند را یک مقدار پیشفرض ارائه دهید. در مورد Updatable View ها هم یک تحقیقی بکنید.
با تشکر
حمید ج. فرد
درست منظورم رو نفموندم. البته سوال برای خودم هم ابهام داره. من برای عمل select روی جداول پایه دید تعریف کردم ستون ها رو انتخاب کردم که مشکلی نداره. ولی مثلا برای اجازه اضافه کردن چون بازم گفته روی همین فیلدها می خواستم روی دید عملیات درج رو انجام بدم که پیغام میده باید روی چند جدول پایه انجام بشه و خطا میده. چون نام درس مربوط به جدول دروس هست. نام استاد جدول اساتید و بقیه فیلد ها جدول دروس ارائه شده.
البته شاید من درس پایگاه داده رو فراموش کرده باشم ولی فکر میکنم باید راهی برای انتشار این عملیات ها روی جداول مبنا باشه که من نمیدونم.در واقع من با عملیات روی دید مشکل دارم
ببخشید یه سوال دارم. بعضی قسمت ها باید دید روی چند جدول تعریف کنیم اونوقت برا حذف و اضافه کردن روی چند جدول پایه باید انجام بشه ولی فقط روی چند فیلد خاص اجازه دسترسی داده اونوقت این موارد رو به نظرتون باید چکار کرد. مثلا در مورد زیر :
چجوری فقط با همین چند صفت اضافه کردن رو باید انجام داد پیغام میده چون روی چند جدول پایه است قابل انجام نیست
بازهم رسيديد به نكته اي كه من گفتم. شما بايد نام كاربر را از تابع user_name گرفته و بعد در يك view سطرها را بر اساس نام كاربر فيلتر كنيد
البته همانطور که parsasi گفته شما می توانید از این روش استفاده کنید ولی بنده صورت مساله را خواندم و یک نکته وجود دارد که هر دانشجو یا استاد فقط باید رکوردهای مربوط به خود را ببیند که برای پیاده سازی این روش شما باید از Row Level Security استفاده کنید که این قابلیت در SQL Server 2016 وجود دارد ولی برای پیاده سازی آن در دیگر نسخه های روشهایی هم است. به این صورت که شما باید نام کاربری که وارد سیستم می شود را از طریق تابع User__Name(()) بخوانید و با نام کاربر در جداول مربوطه چک کنید این روش باید از طریق ساختن یک View انجام شود.
با تشکر
خیر.
یوزر یا همان کاربر به خودی خود هیچ کاری نمیتونه انجام بده بلکه به واسط نقش هایی که بهش میدیم ،میتونه کار انجام بده.
مثلا مدیر گروه. در اصل اون هم یک کاربره مثل بقیه اشخاص ولی چه چیزی باعث میشه که ما بهش بگیم مدیر گروه؟
در اصل سطح اختیارات این کاربره که باعث میشه یکسری عملیات رو بتونه انجام بده و یکسری رو نتونه.
مثل همون 4 عمل اصلی ای که بهتون معرفی کردم.
سلام
ببینید اون چیزی که از شما خواستن قسمتیش بر میگرده به قید ها و طراحی جداولتون و بخش دیگش به قسمت سطح دسترسی.
و اما اون چیزی که شما نیاز دارید به این صورته:
شما ابتدا وارد 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]
با این کار شما این این یوزر رو عضو گروه ذکر شده می کنید.
بسیار ممنون .
مثال بسیار عالی بود.