1, 概述
在生产环境下操作数据库时, 绝对不可以使用 root 账户连接, 而是创建特定的账户, 授予这个账户特定的操作权限, 然后连接进行操作, 主要的操作就是数据的 crud.
MySQL 账户体系: 根据账户所具有的权限的不同, MySQL 的账户可以分为以下几种
服务实例级账号:, 启动了一个 mysqld, 即为一个数据库实例; 如果某用户如 root, 拥有服务实例级分配的权限, 那么该账号就可以删除所有的数据库, 连同这些库中的表
数据库级别账号: 对特定数据库执行增删改查的所有操作
数据表级别账号: 对特定表执行增删改查等所有操作
字段级别的权限: 对某些表的特定字段进行操作
存储程序级别的账号: 对存储程序进行增删改查的操作
账户的操作主要包括创建账户, 删除账户, 修改密码, 授权权限等.
进行账户操作时, 需要使用 root 账户登录, 这个账户拥有最高的实例级权限.
通常都使用数据库级操作权限.
2, 授予权限
需要使用实例级账户登录后操作
2.1 查看所有用户
所有用户及权限信息存储在 MySQL 数据库的 user 表中: use MySQL
查看表: show tables;
查看 user 表的结构: desc user;
查看所有用户: select host,user,authentication_string from user;
主要字段说明:(1)host 表示允许访问的主机
(2)user 表示用户名
(3)authentication_string 表示密码, 为加密后的值
2.2 创建账户, 授权
需要使用实例级账户登录后操作
常用权限主要包括: create,alter,drop,insert,update,delete,select
如果分配所有权限, 可以使用 all privileges
2.2.1 创建账户 & 授权
grant 权限列表 on 数据库 to "用户名"@"访问主机" identified by "密码";
- grant select on jing_dong.* to 'laowang'@'localhost' identified by '123456';
- grant all privileges on jing_dong.* to "laoli"@"%" identified by "12345678"
说明:(1) 可以操作 python 数据库的所有表, 方式为: jing_dong.*
(2) 访问主机通常使用 百分号 % 表示此账户可以使用任何 ip 的主机登录访问此数据库
(3) 访问主机可以设置成 localhost 或具体的 ip, 表示只允许本机或特定主机访问
查看用户有哪些权限: show grants for [email protected];
3, 账户操作
3.1 修改权限
grant 权限名称 on 数据库 to 账户 @主机 with grant option;
- grant select,insert on jing_dong.* to [email protected] with grant option;
- # 修改完权限后还需要刷新一下
- flush privileges;
3.2 修改密码
使用 root 登录, 修改 MySQL 数据库的 user 表
- # 使用 password() 函数进行密码加密
- update user set authentication_string=password('新密码') where user='用户名';
例:
- update user set authentication_string=password('123') where user='laowang';
- # 注意修改完成后需要刷新权限
- # 刷新权限
- flush privileges
3.3 远程登陆 (危险慎用)
如果向在一个 Ubuntu 中使用 msyql 命令远程连接另外一台 MySQL 服务器的话, 通过以下方式即可完成, 但是此方法仅仅了解就好了, 不要在实际生产环境中使用
修改 /etc/MySQL/MySQL.conf.d/mysqld.cnf 文件: VIM/etc/MySQL/MySQL.conf.d/mysqld.cnf
然后重启 MySQL:servive MySQL restart
在另外一台 Ubuntu 中进行连接测试:
如果连接不上, 可能原因:
(1) 网络不同, 同 ping 目标 ip 检查网络是否能正常通信
(2) 查看数据库是否配置了 bind_address 参数
本地登录数据库查看 my.conf 文件和数据库当前参数 show variables like 'bind_address';
如果设置了 bind_address=127.0.0.1, 那么只能本地登录
(3) 查看数据库是否设置了 skip_networking 参数
如果设置了该参数, 那么只能本地登录 MySQL 数据库.
(4) 端口指定是否正确
3.4 删除账户
(1) 语法 1: 使用 root 登录
drop user '用户名'@'主机'
(2) 语法 2: 使用 root 登录, 删除 MySQL 数据库的 user 表中的数据
- delete from user where user='用户名';
- # 操作结束后刷新权限
- flush privileges
来源: http://www.bubuko.com/infodetail-3500174.html