MySQL学习_权限管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jt102605/article/details/86669143

MySQL 账户

MySQL 的账号信息保存在 mysql 数据库中的user表中

登陆数据库后,可以进行查看

show databases;
use mysql;
show tables;
select user from user;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| video_server       |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| component                 |
| db                        |
| default_roles             |
| engine_cost               |
| func                      |
| general_log               |
| global_grants             |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| password_history          |
| plugin                    |
| procs_priv                |
| proxies_priv              |
| role_edges                |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
33 rows in set (0.01 sec)
mysql> select user from user;
+------------------+
| user             |
+------------------+
| root             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
5 rows in set (0.01 sec)

mysql账号格式:用户名@可访问控制列表

可访问控制列表:

  • % :表示可以从所有外部主机访问数据库
  • 某个网段 :如192.168.0.1, 表示可以从192.168.0.1网段访问数据库
  • localhost :表示只可以从数据库服务器本地访问数据库

注:1. "%"不包括数据库服务器本地访问,默认情况是"%"

  2. 在登录时,不需要提供"@可访问控制列表"部分

 

创建账户

使用"CREATE USER"语句创建数据库新用户,新创建的账户没有任何权限

CREATE USER myuser IDENTIFIED BY 'mypassword';
mysql> create user myuser identified by "123";
Query OK, 0 rows affected (0.19 sec)

mysql> select user from user;
+------------------+
| user             |
+------------------+
| myuser           |
| root             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
6 rows in set (0.00 sec)

修改账户名

RENAME myuser TO newuser;

删除账户

DROP USER myuser;

 

MySQL 用户权限

mysql中常用权限总结:

  语句 说明
Admin Create User 建立新用户的权限
Grant option 为其他用户授权的权限
Super 管理服务器的权限
DDL Create  新建数据库,数据表的权限
Alter 修改表结构的权限
Drop 删除数据库和数据表的权限
Index 建立和删除索引的权限
DML Select 查询表中数据的权限
Insert 向表中插入数据的权限
Update 更新表中数据的权限
Delete 删除表中数据的权限
Execute 执行存储过程的权限

查看mysql支持的所有权限

show privileges;

查看某个用户的权限

SHOW GRANTS FOR myuser;

授予权限

注:未授权的用户可以登录,但只能看到"information_schema"一个数据库

GRANT SELECT, INSERT ON mydatabase.* TO myuser;

删除权限

REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;

GRANT 和 REVOKE 可在几个层次上控制访问权限:

  • 整个服务器,使用 GRANT ALL 和 REVOKE ALL;
  • 整个数据库,使用 ON database.*;
  • 特定的表,使用 ON database.table;
  • 特定的列;
  • 特定的存储过程。

 

如何保证数据库账号安全

  • 最小权限原则
  • 密码强度策略
  • 在创建账号时,使用"密码过期原则"以及"限制历史密码重用原则(mysql8.0新功能)"
#禁止使用n次以前的密码
create user test identified by "123" password history n;

select * from mysql.user where user="test"\G

#将一个账号的密码设置为过期
alter user test password expire;

 

数据库账号的迁移

  • 数据库版本一致或低版本向高版本迁移时,可以使用备份数据库,然后在目的实例恢复的方式完成数据库账号的迁移;
  • 更通用的方法是,导出授权语句,然后在目的实例上执行
展开阅读全文

没有更多推荐了,返回首页