返回介绍

5.2 MySQL 权限管理

发布于 2024-10-03 00:33:42 字数 5243 浏览 0 评论 0 收藏 0

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       |
| db            |
| func           |
| help_category       |
| help_keyword       |
| help_relation       |
| help_topic        |
| host           |
| proc           |
| procs_priv        |
| tables_priv        |
| time_zone         |
| time_zone_leap_second   |
| time_zone_name      |
| time_zone_transition   |
| time_zone_transition_type |
| user           |
+---------------------------+
17 rows in set (0.00 sec)

5.2.1 登陆访问控制

阶段 1:连接证实

服务器基于你的身份和你是否能通过供应正确的口令验证身份来接受或拒绝连接。

你的身份基于 2 个信息:

  • 你从那个主机连接
  • 你的 MySQL 用户名

阶段 2:请求证实

对在此连接上进来的每个请求,服务器检查你是否有足够的权限来执行它,它基于你希望执行的操作类型。这正是在授权表中的权限字段发挥作用的地方。

服务器在存取控制的两个阶段使用在 mysql 的数据库中的 userdbhost

权限列表

权限上下文
selectSelect_priv
insertInsert_priv
updateUpdate_priv
deleteDelete_priv
indexIndex_priv
alterAlter_priv
createCreate_priv数据库、表或索引
dropDrop_priv数据库或表
grantGrant_priv数据库或表
referencesReferences_priv数据库或表
reloadReload_priv服务器管理
shutdownShutdown_priv服务器管理
processProcess_priv服务器管理
fileFile_priv在服务器上的文件存取

不同角色所关心的问题(mysql 数据库,系统数据库非应用数据库)

应用者: 是否能够访问,host, user, db; 关心字段:Host, User, Passwd

开发者:除应用者有的外,还包括 tables_priv, column_priv

5.2.2 安全访问(ROOT/用户权限)

5.2.2.1 指定路径启动

说明:例子中安装路径为 /data/mysql3307

$ /data/mysql3307/bin/mysqld --defaults-file=/data/mysql3307/my.cnf --port=3307 --basedir=/data/mysql3307 --datadir=/data/mysql3307/data --user=mysql --pid-file=/data/mysql3307/data/R720.pid --skip-locking --skip-name-resolve

如果用 mysqld_safe 启动,需要在安装路径才能启动(因为 mysqld_safe 是脚本,需要用到相对路径)。

# 启动
./bin/mysqld_safe --port=3307 --defaults-file=/data/mysql3307/my.cnf
# 关闭
./bin/mysqladmin –uroot –p –P 3307 shutdown

5.2.2.2 为 root 设定密码

shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
           WHERE user='root';
mysql> FLUSH PRIVILEGES;

或:(不好用)

shell> mysql -u root mysql
mysql> SET PASSWORD FOR root=PASSWORD('new_password');

或:[推荐]

shell> mysqladmin -u root password new_password

5.2.2.3 向 MySQL 增加新用户权限~GRANT

你可以通过发出 GRANT 语句增加新用户:

grant 权限 on 数据库.* to 用户名 @'登录主机' identified by '密码'

注 1:登陆主机: % 表示所有 ip; localhost 表示本机; 192.168.10.2 特定 IP

注 2:登陆主机和密码必须用引号圈起来。若有特殊符号如_等,数据库用``圈起来。

shell> mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON `game`.* TO test@'%' IDENTIFIED BY '123456';

8.x 后版本授权发生变化,需要先加用户,再授权。将一条语句拆分成三条执行

mysql> SELECT @@VERSION;
+-----------+
| @@VERSION |
+-----------+
| 8.0.21    |
+-----------+
1 row in set (0.00 sec)

# 创建账户
create user 'root'@'1ocalhost' identified by  'password'

# 赋予权限,with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to 'root'@'1ocalhost' with grant option

# 改密码 & 授权超用户,flush privileges 命令本质上的作用是将当前 user 和 privilige 表中的用户信息/权限设置从 mysql 库(MySQL 数据库的内置库) 中提取到内存里
flush privileges;

备注: 8.x 版本 root 只能用在 localhost 里。

若密码太简单,报密码安全策略不允许,则修改如下:

set global validate_password_policy=LOW;

5.2.2.4 忘记 root 密码

1、先停止 mysql

> shell > `/etc//init.d/mysql stop `

2、以 --skip-grant-table 的参数启动 mysqld

> shell > `mysqld_safe --skip-grant-table`

3、更改 root 密码 123456

mysql> UPDATE user SET password=password('123456') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit
  1. 重启 mysql
shell >/etc//init.d/mysql restart

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文