在 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
语句对用户授予不同的权限。