В этом учебном пособии вы узнаете, как предоставлять и отменять привилегии в MySQL с синтаксисом и примерами.
Описание
Вы можете использовать привилегии GRANT и REVOKE для различных объектов базы данных в MySQL. Затем вы можете просмотреть привилегии, назначенные пользователю, используя команду SHOW GRANTS. Мы рассмотрим, как предоставлять и отменять привилегии для таблиц, функций и процедур в MySQL.
Grant привилегии на таблицу
Вы можете предоставить пользователям различные привилегии для таблиц. Эти разрешения могут быть любой комбинацией SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE, ALTER, DROP, GRANT OPTION или ALL.
Синтаксис
Синтаксис предоставления привилегий для таблицы в MySQL:
privileges - это может быть любое из следующих значений:
Привилегии | Описание |
---|---|
SELECT | Возможность выполнения операторов SELECT для таблицы. |
INSERT | Возможность выполнения операторов INSERT для таблицы. |
UPDATE | Возможность выполнения операторов UPDATE для таблицы. |
DELETE | Возможность выполнения операторов DELETE для таблицы. |
INDEX | Возможность создания индекса в существующей таблице. |
CREATE | Возможность выполнять оператор CREATE TABLE. |
ALTER | Возможность выполнять оператор ALTER TABLE для изменения определения таблицы. |
DROP | Возможность выполнения операторов DROP TABLE. |
GRANT OPTION | Позволяет предоставлять права, которыми вы обладаете для других пользователей. |
ALL | Предоставляет все разрешения, кроме GRANT OPTION. |
object - имя объекта базы данных, для которого вы предоставляете разрешения. В случае предоставления привилегий в таблице это будет имя таблицы.
user - имя пользователя, которому будут предоставлены эти привилегии.
Пример
Рассмотрим некоторые примеры предоставления привилегий на таблицу в MySQL.
Например, если вы хотите предоставить привилегии SELECT, INSERT, UPDATE и DELETE в таблице contacts, с именем пользователя adam, вы должны запустить следующий оператор GRANT:
1 |
GRANT SELECT, INSERT, UPDATE, DELETE ON contacts TO 'adam'@'localhost'; |
Вы также можете использовать ключевое слово ALL, чтобы указать, что вы хотите предоставить все разрешения, кроме GRANT OPTION, пользователю с именем 'adam'.
Например:
1 |
GRANT ALL ON contacts TO 'adam'@'localhost'; |
Если вы хотите предоставить только доступ SELECT в таблице contacts всем пользователям, вы можете предоставить привилегии *.
Например:
1 |
GRANT SELECT ON contacts TO '*'@'localhost'; |
Отменить привилегии на таблицу
Как только вы предоставили привилегии, вам может потребоваться отменить некоторые или все эти привилегии. Для этого вы можете запустить команду отмены. Вы можете отменить любую комбинацию SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER или ALL.
Синтаксис
Синтаксис отмены привилегий на таблицу в MySQL:
privileges - это может быть любое из следующих значений:
Привилегии | Описание |
---|---|
SELECT | Возможность выполнения операторов SELECT для таблицы. |
INSERT | Возможность выполнения операторов INSERT для таблицы. |
UPDATE | Возможность выполнения операторов UPDATE для таблицы. |
DELETE | Возможность выполнения операторов DELETE для таблицы. |
INDEX | Возможность создания индекса в существующей таблице. |
CREATE | Возможность выполнять оператор CREATE TABLE. |
ALTER | Возможность выполнять оператор ALTER TABLE для изменения определения таблицы. |
DROP | Возможность выполнения операторов DROP TABLE. |
GRANT OPTION | Позволяет предоставлять права, которыми вы обладаете для других пользователей. |
ALL | Предоставляет все разрешения, кроме GRANT OPTION. |
object - имя объекта базы данных, для которого вы отменяете привилегии. В случае отмены привилегий для таблицы это будет имя таблицы.
user - имя пользователя, у которого будут отменены эти привилегии.
Пример
Рассмотрим некоторые примеры отмены привилегий на таблицу в MySQL.
Например, если вы хотите отменить привилегии DELETE и UPDATE в таблице contacts пользователю с именем adam, вы должны запустить следующий оператор REVOKE:
1 |
REVOKE DELETE, UPDATE ON contacts FROM 'adam'@'localhost'; |
Если вы хотите отменить все разрешения (кроме GRANT OPTION) в таблице для пользователя с именем adam, вы можете использовать ключевое слово ALL следующим образом:
1 |
REVOKE ALL ON contacts FROM 'adam'@'localhost'; |
Если вы предоставляли привилегии SELECT для * (т.е. всех пользователей) в таблице contacts, и вы хотели бы отменить эти привилегии, вы можете запустить следующий оператор REVOKE:
1 |
REVOKE SELECT ON contacts FROM '*'@'localhost'; |
Предоставить привилегии на функции / процедуры
При работе с функциями и процедурами вы можете предоставить пользователям возможность ИСПОЛНЕНИЯ этих функций и процедур в MySQL.
Синтаксис
Синтаксис предоставления привилегий EXECUTE для функции / процедуры в MySQL:
EXECUTE - возможность выполнения функции или процедуры.
PROCEDURE - используется, когда привилегия предоставляется процедуре в MySQL.
FUNCTION - используется, когда привилегия предоставляется для функции в MySQL.
object - имя объекта базы данных, для которого предоставляются привилегии. В случае предоставления привилегий EXECUTE для функции или процедуры это будет имя функции или имя процедуры.
user - имя пользователя, которому будут предоставлены привилегии EXECUTE.
Пример - функция
Рассмотрим некоторые примеры того, как предоставить привилегии EXECUTE для функции в MySQL.
Например, если у вас есть функция GetBestPrice и вы хотите предоставить EXECUTE доступ к пользователю с именем trizor, то вы должны запустить следующий оператор GRANT:
1 |
GRANT EXECUTE ON FUNCTION GetBestPrice TO 'trizor'@'localhost'; |
Если вы хотите предоставить всем пользователям возможность ВЫПОЛНИТЬ эту функцию, вы должны выполнить следующий оператор GRANT:
1 |
GRANT EXECUTE ON FUNCTION GetBestPrice TO '*'@'localhost'; |
Пример - процедура
Рассмотрим некоторые примеры того, как предоставить привилегии EXECUTE для процедуры в MySQL.
Например, если у вас была процедура с именем MySqlProc и вы хотели предоставить EXECUTE доступ к пользователю с именем trizor, то вы должны выполнить следующий оператор GRANT:
1 |
GRANT EXECUTE ON PROCEDURE MySqlProc TO 'trizor'@'localhost'; |
Если вы хотите предоставить всем пользователям возможность выполнять эту процедуру, то вы должны выполнить следующий оператор GRANT:
1 |
GRANT EXECUTE ON PROCEDURE MySqlProc TO '*'@'localhost'; |
Отменить привилегии для функций/процедур
После того, как вы предоставили привилегии EXECUTE для функции или процедуры, вам может потребоваться отменить эти привилегии пользователю в MySQL. Для этого вы можете выполнить команду REVOKE.
Синтаксис
Синтаксис для отмены привилегии на функцию или процедуру в MySQL:
EXECUTE - возможность выполнять функцию или процедуру отменяется.
PROCEDURE - используется, когда отменяется привилегия для процедуры в MySQL.
FUNCTION - используется, когда отменяется привилегия для функции в MySQL.
object - имя объекта базы данных, для которого вы отменяете привилегии. В случае отмены привилегий EXECUTE для функции или процедуры это будет имя функции или имя процедуры.
user - имя пользователя, которому будут отменены привилегии EXECUTE.
Пример - функция
Рассмотрим некоторые примеры того, как отменить привилегии EXECUTE для функции в MySQL.
Если вы хотите отменить привилегии EXECUTE для функции GetBestPrice пользователю с именем trizor, то вы должны запустить следующий оператор REVOKE:
1 |
REVOKE EXECUTE ON FUNCTION GetBestPrice FROM 'trizor'@'localhost'; |
Если вы предоставили привилегии EXECUTE для * (всех пользователей) функции, называемой GetBestPrice, и вы хотели отменить эти привилегии EXECUTE, вы можете запустить следующий оператор REVOKE:
1 |
REVOKE EXECUTE ON FUNCTION GetBestPrice FROM '*'@'localhost'; |
Пример - процедура
Рассмотрим некоторые примеры того, как отменить привилегии EXECUTE для процедуры в MySQL.
Если вы хотите отменить привилегии EXECUTE в процедуре MySqlProc пользователя с именем trizor, вы должны запустить следующий оператор REVOKE:
1 |
REVOKE EXECUTE ON PROCEDURE MySqlProc FROM 'trizor'@'localhost'; |
Если вы предоставили привилегии EXECUTE для * (всех пользователей) процедуры, называемой MySqlProc, и вы хотели отменить эти привилегии EXECUTE, вы можете запустить следующий оператор REVOKE:
1 |
REVOKE EXECUTE ON PROCEDURE MySqlProc FROM '*'@'localhost'; |