اعطای مجوز های SQL به کاربران در MySQL

در این مطلب چگونگی ایجاد یک کاربر در محیط پایگاه داده MySQL گفته شد. هر کاربری برای اجرای دستورات SQL مانند Select, update, insert و غیره بر روی جدول های یک پایگاه داده، نیاز به داشتن مجوز مربوطه بر روی آن پایگاه داده دارد. در ادامه این پست نخست یک پایگاه داده به نام demo ایجاد می کنیم و سپس کاربرانی را با مجوزهایی بر روی پایگاه داده demo ایجاد خواهیم کرد. پس لازم است نخست با کاربر root به پایگاه داده MySQL متصل شوید.

mysql -u root -p

ENETR PASSWORD

سپس یک پایگاه داده به نام demo و با دومین دستور زیر کاربر user1 را با تمامی مجوز ها بر روی تمامی جدول های پایگاه داده demo ایجاد می کنیم. در تمامی دستور های زیر رابطه میان پایگاه داده و نام جدول به صورت DB_NAME.TBL_NAME است.

;create databse demo

;”grant all privileges on demo.* to user1@localhost identified by “YOUR_PASSWORD

با پرسو جوی زیر می توانید مجوزهایی که کاربر user1 کسب کرده است را ببینید.

;show grants for user1@localhost

پس می توانید با کاربر user1 به MySQL Server بر روی localhost متصل شوید و پایگاه داده demo را انتخاب و سپس جدولی ساخته و تمامی اعمال را بروی جداول پایگاه داده demo انجام دهید.

mysql -u user1 -h localhost -p

ENTER PASSWORD

;use demo

با دستور زیر به کاربر user1 مجوز ها select و update تنها بر روی جدول test_tbl از پایگاه داده ای به نام test اعطا می کنیم (توجه کنید کاربر user1 از قبل وجود دارد و دیگر نیازی به identified by نیست)

;grant select, update on test.test_tbl to user1@localhost

همچنین می توانیم روی ستون (های) خاصی مجوز بدهیم.

;grant select, update (column1, column3) on test.test_tbl to user1@localhost

با دستور زیر از جدول columns_priv (یک Data Dictionary) مجوز های مربوطه را بر روی ستون ها برای کاربری خاص (در اینجا user1) می توانید مشاهده کنید.

select host, db, user, table_name, column_name, column_priv

;’from columns_priv where user=’user1

با دستور زیر تمامی مجوز های داده شده به کاربر user1 بر روی تمامی جدول های پایگاه داده demo پس گرفته می شود. (دقت کنید از عبارت *.demo برای اعطای مجوز استفاده کردیم، پس باید از همین عبارت هم در پس گرفتن مجوز ها استفاده کنیم.)

;revoke all privileges on demo.* from user1@localhost

و با دستور زیر تمامی مجوز های داده شده به کاربر user1 بر روی جدول test_tbl از پایگاه داده test پس گرفته می شود. دقت کنید ما در مثال های بالا تنها به user1 بر روی جدول test_tbl مجوز دادیم و باید test.test_tbl را بنویسیم.

;revoke all privileges on test.test_tbl from user1@localhost

البته می توانستیم با دستور زیر تنها update را از آن پس بگیریم.

;revoke update on test.test_tbl from user1@localhost