مدیریت کاربران و دیتابیسهای MySQL
با استفاده از ابزار CLI دیتابیس MySQL میتوانید به کاربران دیتابیس دسترسیهای لازم را بدهید، دسترسیها را از کاربران بگیرید و دسترسی کاربران را مشاهده کنید. در ادامه، موارد گفته شده را بررسی خواهیم کرد. برای اجرای دستورات باید ابتدا با توجه به این مستند به دیتابیس متصل شوید.
دادن دسترسی به کاربران
با این دستورات کاربر جدید
newuser
را بسازید و دسترسی
SELECT
را در دیتابیس
hamdb
به آن بدهید:
GRANT SELECT ON hamdb.* TO 'newuser'@`%`;
FLUSH PRIVILEGES;
این دسترسی روی تمام جدولهای این دیتابیس داده میشود. با این دسترسی این کاربر فقط میتواند عملیات read را روی دیتابیس انجام دهد. برای تغییر محتوای جدولهای دیتابیس دستر سیهای زیر را به آن بدهید:
GRANT SELECT, INSERT, UPDATE, DELETE ON hamdb.* TO 'newuser'@'%';
FLUSH PRIVILEGES;
گرفتن دسترسی از کاربران
برای گرفتن دسترسی از کاربران از
REVOKE
استفاده میکنیم:
REVOKE DELETE ON hamdb.* FROM 'newuser'@'%';
با این دستور دسترسی
DELETE
را از
newuser
گرفتیم.
دیدن دسترسیهای کاربر
با دستور زیر میتوانید دسترسیهای کاربر
newuser
را ببینید:
SHOW GRANTS FOR 'newuser';
برای دیدن دسترسی کاربر خودتان این دستور را بزنید:
SHOW GRANTS;
مدیریت کاربران و دیتابیسهای PostgreSQL
به طو ر پیشفرض دیتابیس پستگرس مدیریتشدهای که میسازید، کاربر
postgres
و دیتابیس
postgres
را دارد.
شما میتوانید دیتابیسها و کاربران مد نظر خودتان را به راحتی در کنسول همروش اضافه کنید.
اضافه یا حذف کردن کاربر
برای ساخت کاربر جدید به تب «کاربران و دیتابیسها» بروید. در قسمت «کاربران» دکمهی اضافه کردن را بزنید.
سپس نام کاربر را وارد کنید و دکمهی «افزودن» را بزنید. بعد از این کار کاربر جدید را در لیست کاربران خواهید دید.
اضافه یا حذف کردن دیتابیس
برای ایجاد دیتابیس جدید به تب «کاربران و دیتابیسها» بروید. در قسمت «دیتابیسها» دکمهی اضافه کردن را بزنید.
سپس نام دیتابیس را وارد کنید و دکمهی «افزودن» را بزنید. بعد از این کار دیتابیس جدید را در لیست د یتابیسها خواهید دید.
دادن دسترسی دیتابیس به کاربر جدید
یوزری که در پنل همروش میسازید، به صورت پیشفرض دسترسی خاصی روی هیچ دیتابیسی ندارد. برای این که یک کاربر جدید بتواند به یک دیتابیس خاص دسترسی داشته باشد (مثلاً بتواند روی آن دیتابیس درخواست خواندن اجرا کند یا دادهای اضافه یا حذف کند)، باید به صورت دستی از طریق خط فرمان (CLI) یا ابزارهایی مثل psql دسترسیها را تنظیم کنید.
برای اتصال به دیتابیس میتوانید به سند اتصال به دیتابیسها مراجعه کنید.
در ادامه میخواهیم در مورد نحوه دسترسی دادن در PostgreSQL صحبت کنیم. قبل از اینکه ادامه دهیم، لازم است مفهوم اسکیما (schema) را در PostgreSQL خوب بشناسیم.
اسکیما (schema) چیست؟
در PostgreSQL، اسکیما مثل یک پوشه یا فضای جداگانه داخل هر دیتابیس است که آبجکتهایی مثل جدول، ویو و سایر اشیا را در خود نگه میدارد. هر دیتابیس میتواند چندین اسکیما داشته باشد؛ این یعنی میتوان چند جدول با نام مشابه در اسکیماهای مختلف ایجاد کرد (مشابه مفهوم نیماسپیس در کوبرنتیز). به طور پیشفرض یک اسکیما به نام public وجود دارد و اکثر جدولهای اولیه معمولاً در آن ساخته میشوند.
انواع دسترسیهای قابل اعطا به کاربر روی دیتابیس
برای یک کاربر جدید، ابتدا باید تعیین کنیم که چه دسترسیهایی روی دیتابیس دارد. مهمترین دسترسیها:
-
CONNECT: اجازه میدهد کاربر بتواند به دیتابیس متصل شود.
-
CREATE: اجازه میدهد کاربر اسکیما (schema) جدید درست کند و در اسکیماهایی که دسترسی دارد، جدول بسازد.
همچنین دسترسیهای دیگری به نام TEMP و TEMPORARY وجود دارد که به کاربر اجازه میدهند جداول موقتی (temporary tables) ایجاد کند. این دسترسیها معمولاً برای ساخت جدولهایی است که فقط در سشن جاری وجود دارند و بعد از قطع اتصال پاک میشوند.
در این مستند فعلاً با دسترسی TEMP و temporary کاری نداریم و بیشتر تمرکز روی CREATE و CONNECT است.
مثلاً برای دادن این دو دسترسی به کاربر myuser روی دیتابیس mydb این دستورات را اجرا کنید:
GRANT CONNECT ON DATABASE mydb TO myuser;
GRANT CREATE ON DATABASE mydb TO myuser;
اگر بخواهید همه دسترسیهای پایهای دیتابیس (از جمله دسترسیهای بالا) را یکجا بدهید میتوانید از ALL PRIVILEGES استفاده کنید:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
با این کار، کاربر میتواند به دیتابیس وصل شود، اسکیما جدید ایجاد کند:
CREATE SCHEMA myschema;
و در اسکیما خودش جدول جدید بسازد:
CREATE TABLE myschema.newtable (id serial PRIMARY KEY, name text);
اما مهم است بدانید:
تا زمانی که دسترسی جداگانهای بر روی اسکیماهای موجود (مثلاً public) و جدولهای داخل آنها نداده باشید، کاربر جدید نه میتواند جدولهای موجود در اسکیما public را ببیند و نه دادههای آن را بخواند یا تغییر دهد. اگر سعی کند مثلا select ب زند:
SELECT * FROM public.another_table;
با خطای permission denied مواجه خواهد شد.
چگونه اجازه مشاهده و کار با جداول دیگر را بدهیم؟
اگر میخواهید کاربر، روی جدولهایی که قبلاً در اسکیما public (یا هر اسکیمای دیگری) ساخته شدهاند، مثلاً بخواهد select یا insert انجام دهد، باید به طور جداگانه مجوز بدهید. مثلاً برای تمام جدولهای فعلی اسکیما public:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
یا اگر فقط اجازه خواندن نیاز دارد:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
دسترسی خودکار به جدولهای جدید (در آینده)
این دستورات فقط جدولهایی که تا الان ساخته شدهاند را شامل میشوند. اگر در آینده جدولهای جدیدی ساخته شوند، کاربر دسترسی نخواهد داشت مگر privilege پیشفرض را به صورت زیر تغییر دهید:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO myuser;
یا برای فقط اجازه خواندن:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO myuser;
برای اطلاعات بیشتر میتوانید به مستندات رسمی PostgreSQL مراجعه کنید:
https://www.postgresql.org/docs/current/sql-grant.html