一、库权限控制

基本的MySQL用户:

1.用户:只拥有登录mysql系统的权限,但是没有访问具体的数据库或数据表的权限;需要使用CREATE USER创建。

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

2.数据库用户:拥有访问数据库的权限,但是不具备管理数据库的权限;需要使用GRANT授权给指定的用户。

GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'user'@'localhost' IDENTIFIED BY 'password';

3.管理员:拥有管理MySQL的权限,可以授权给其他用户;可以使用GRANT授权,通过WITH GRANT选项允许其他用户授权。

GRANT CREATE, ALTER, DROP, GRANT OPTION ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

4.ROOT:具有最高权限的管理员,拥有所有数据库和表的权限;ROOT可以管理其他管理员与用户。

基本的权限操作:

1. 创建一个新的MySQL用户:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

2. 分配SELECT,INSERT,UPDATE权限:
GRANT SELECT,INSERT,UPDATE ON mydatabase.* TO 'user'@'localhost' IDENTIFIED BY 'password';

3. 分配所有权限:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'user'@'localhost' IDENTIFIED BY 'password';

4. 将用户的权限回收:
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'user'@'localhost';

二、表权限控制

MySQL表权限是指对MySQL数据库中表的访问控制。通过设置表权限,可以限制用户对表的操作,保护数据的安全性和完整性。

- SELECT:允许用户读取一行或多行数据
 - INSERT:允许用户向数据表插入一行或多行数据
 - UPDATE:允许用户修改数据表中的数据,并且可以选择一个或多个列进行更新
 - DELETE:允许用户从数据表中删除一行或多行数据
 - CREATE:允许用户创建新的数据表或者数据库
 - ALTER:允许用户修改数据表结构
 - DROP:允许用户删除数据表或者整个数据库
 - INDEX:允许用户创建索引
 - REFERENCES:允许用户创建外键
 - ALL:允许用户进行所有操作
  • 创建用户:

在MySQL中创建用户是设置表权限的第一步。可以使用CREATE USER语句创建用户。

# 创建名为"testuser"的用户,并授予SELECT权限:

CREATE USER 'user'@'localhost' IDENTIFIED BY  'password';
  • 授权:
# GRANT表示授权,
# SELECT和INSERT为授权的操作,
# database.table指定要授权的数据库和表,
# 'user'@'localhost'表示要被授权的用户名和主机名。

GRANT SELECT,INSERT ON database.table TO 'user'@'localhost';

如果想授权全部操作,则可以使用ALL关键字

# ALL PRIVILEGES授权了该用户在指定数据库中进行所有操作的权限。
# database.*授权该用户对指定数据库的所有表和视图都具有完全的权限。
#FLUSH PRIVILEGES命令用于刷新权限,以确保MySQL的权限系统已更新。

GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
  • 显示mysql所有用户以及权限
# user表示用户名,
# host表示用户所在的主机,
# authentication_string表示该用户的加密密码或者密码哈希值。

SELECT user, host, authentication_string FROM mysql.user;
  • 查看每个用户的具体权限
SHOW GRANTS FOR 'user'@'localhost';
  • 撤销表权限:

在MySQL中,使用REVOKE语句撤销用户对表的权限。

REVOKE SELECT ON database.table FROM 'user'@'localhost';