- 1 MySQL 简介
- MySQL 版本和产品线说明
- MySQL 安装
- 2 MySQL 基础教程
- 2.1 SQL 语法:SELECT/INSERT/UPDATE/DELETE
- 2.2 MySQL 列类型
- 2.3 使用用户变量
- 2.4 MySQL 的日期和时间管理
- 2.5 集合运算
- 3 MySQL 高级教程
- 3.1 触发器
- 3.2 视图
- 3.3 复制 Replication~主从库配置
- 3.4 分区存储
- 本章参考
- 4 MySQL 优化
- 4.1 优化数据库结构
- 4.2 优化 SQL 语句
- 4.3 优化索引
- 4.4 优化数据库服务器 mysql_serverd
- 4.5 修改配置文件 my.cnf/my.ini
- 5 MySQL 管理
- 5.1 MySQL 管理常用命令
- 5.2 MySQL 权限管理
- 5.3 MySQL 备份和恢复
- 5.4 MySQL 数据库安全
- 常见问题 FAQ
- 使用的常见问题
- MySQL 字符集乱码
- MySQL 存储二进制图片
- 参考资料
5.2 MySQL 权限管理
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
的数据库中的 user
、 db
和 host
表
权限列表
权限 | 列 | 上下文 |
---|---|---|
select | Select_priv | 表 |
insert | Insert_priv | 表 |
update | Update_priv | 表 |
delete | Delete_priv | 表 |
index | Index_priv | 表 |
alter | Alter_priv | 表 |
create | Create_priv | 数据库、表或索引 |
drop | Drop_priv | 数据库或表 |
grant | Grant_priv | 数据库或表 |
references | References_priv | 数据库或表 |
reload | Reload_priv | 服务器管理 |
shutdown | Shutdown_priv | 服务器管理 |
process | Process_priv | 服务器管理 |
file | File_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
- 重启 mysql
shell >/etc//init.d/mysql restart
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论