在 MySQL 中使用 GRANT 语句给用户授权
本文介绍了在 MySQL 中如何使用 GRANT 语句给指定的用户账户赋予指定的权限。
作为一个数据库管理员或者维护人员,为了数据库的安全性,您需要更精确的权限控制。您可以给不同的用户赋予不同的权限。
当您创建了一个新用户之后,这个新的用户可以登录 MySQL 数据库服务器,但是他可能没有任何权限。只有在赋予他数据库和相关表的权限之后,他才可以进行选择数据库和查询等操作。
在 MySQL 中, GRANT 语句用于给用户赋予权限。
MySQL GRANT 语法
下面是 MySQL GRANT 的语法:
GRANT privilege_type [,privilege_type],..
ON privilege_object
TO user_account;
在这个语法中:
privilege_type-
权限类型。要赋予给用户的权限。 常用的包括:
ALL,SELECT,UPDATE,DELETE,ALTER,DROP以及INSERT等。 更详细的内容请参考:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_all privilege_object- 权限对象。可以是所有对象,也可以是某个数据库中的所有对象,表 等。常用的包括:
*,*.*,db_name.*,db_name.table_name,table_name等。 user_account- 用户账户。 它使用
username@host的形式。
下面列举了几种常用的情况:
-
分配全局权限
GRANT ALL ON *.* TO sqliz@localhost;这里将全部数据库全部对象的全部权限分配给了用户
sqliz@localhost -
分配数据库全部对象的全部权限
GRANT ALL ON sqliz.* TO sqliz@localhost;这里将
sqliz数据库全部对象的全部权限分配给了用户sqliz@localhost -
分配数据库中某个表的的查询和插入权限
GRANT SELECT, INSERT ON sqliz.test_table TO sqliz@localhost;这里将
sqliz数据库中的test_table表的SELECT和INSERT权限分配给了用户sqliz@localhost
MySQL GRANT 实例
请按照如下步骤执行 MySQL GRANT 实例:
-
使用 mysql 客户端工具连接到 MySQL 服务器,并使用
root用户登录:mysql -u root -p输入
root帐户的密码并按Enter:Enter password: ******** -
显示来自当前 MySQL 服务器的用户:
SELECT user FROM mysql.user;+------------------+ | user | +------------------+ | root | | test_role1 | | test_role2 | | testuser | | mysql.infoschema | | mysql.session | | mysql.sys | | root | +------------------+ -
创建一个名为
sqliz的新用户:CREATE user 'sqliz'@'%' IDENTIFIED by 'SqLiZ9879123!'; -
再次显示所有用户:
SELECT user FROM mysql.user;+------------------+ | user | +------------------+ | root | | test_role1 | | test_role2 | | testuser | | mysql.infoschema | | mysql.session | | mysql.sys | | root | | sqliz | +------------------+用户
sqliz已成功创建。 -
打开一个新的会话并以
sqliz用户身份登录 MySQL:mysql -u sqliz -p输入密码
sqliz并按下Enter:Enter password: ******** -
查看
sqliz可访问的数据库列表:SHOW DATABASES;以下是
sqliz可以访问的数据库列表:+--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ -
转到用户
root的会话并创建一个新数据库,名为sqlizdb:CREATE DATABASE sqlizdb; -
使用
GRANT语句将数据库sqlizdb的所有权限授权给用户sqliz:GRANT ALL PRIVILEGES ON sqlizdb.* TO sqliz@'%'; -
进入 sqliz 的会话,显示数据库:
SHOW DATABASES;现在,
sqliz可以看到sqlizdb:+--------------------+ | Database | +--------------------+ | information_schema | | sqlizdb | +--------------------+ -
选择数据库
sqlizdb:USE sqlizdb;此后, 默认的数据库为:
sqlizdb。以后的所有操作都默认在此数据库中进行。 -
创建一个新表, 名为
test_table:CREATE TABLE test_table( id int AUTO_INCREMENT PRIMARY KEY, txt varchar(100) NOT NULL ); -
从
sqlizdb数据库中显示表:SHOW TABLES;用户
sqliz可以看到test_table表:+-------------------+ | Tables_in_sqlizdb | +-------------------+ | test_table | +-------------------+ -
在表
test_table中插入一行:INSERT INTO test_table(txt) VALUES('Hello World.'); -
从表
test_table中查询数据:SELECT * FROM test_table;这是输出:
+----+--------------+ | id | txt | +----+--------------+ | 1 | Hello World. | +----+--------------+
现在, 用户 sqliz 可以在 sqlizdb 数据库中做任何事情。
结论
在本文中,您学习了如何使用 MySQL GRANT 语句对用户授予不同的权限。