ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 基本操作 查看现有用户 ``` mysql> SELECT host,user,authentication_string FROM mysql.user; ``` 创建用户(`%` 允许任意ip登录,可固定ip, `192.168.1.%` ip段登录, `localhost` 本地登录) ``` mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password'; ``` 删除用户 ``` mysql> DROP USER 'username'@'host'; ``` 更改用户名 ``` mysql> RENAME USER 'jack'@'%' to 'jim'@'%'; ``` 修改密码 ``` // 1.用 set password 命令 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); // 2.用mysqladmin mysqladmin -uroot -p旧密码 password 新密码 ``` ## 授权 格式: ``` mysql> GRANT privileges ON databasename.tablename TO 'username'@'host' IDENTIFIED BY 'password' WITH GRANT OPTION; ``` ### 1. GRANT命令说明: - `priveleges` (权限列表,底部附权限列表),可以是 `ALL PRIVILEGES` 表示所有权限,也可以是 `select`、`update` 等权限,多个权限的名词,相互之间用逗号分开。 - `ON` 后面指定权限针对哪些库和表,`*.*` 表示所有库所有表。 - `TO` 表示将权限赋予某个用户。 - `IDENTIFIED BY` 指定用户的登录密码,该项可以省略。 - `WITH GRANT OPTION` 表示该用户可以将自己拥有的权限授权给别人,该项可以省略。 - 备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个 `select` 权限,然后又给用户添加一个 `insert` 权限,那么该用户就同时拥有了 `select` 和 `insert` 权限。 ### 2. 授权原则说明: 权限控制主要是出于安全因素,因此需要遵循一下几个经验原则: 1. 只授予能满足需要的最小权限。 2. 初始化数据库的时候删除没有密码的用户。 3. 为每个用户设置满足密码复杂度的密码。 4. 定期清理不需要的用户,回收权限或者删除用户。 eg: ``` // 授予 user1 用户通过外网IP对于所有数据库的全部权限 mysql> GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%'; // 授予 user1 用户在本地服务器对于 database1 数据库的查询和更新权限 mysql> GRANT select,update ON `database1`.* TO 'user1'@'localhost'; // 刷新权限(修改完权限需要刷新才会生效) mysql> flush privileges; ``` 查看当前用户权限 ``` mysql> SHOW GRANTS; ``` 查看其他用户的权限 ``` mysql> SHOW GRANTS FOR 'user1'@'%'; ``` 删除权限 ``` mysql> REVOKE insert ON test.* FROM 'user1'@'%'; ``` ### 附:Mysql权限列表 | 权限 | 作用范围 | 作用 | | --- | --- | --- | | all | 服务器 | 所有权限 | | select | 表、列 | 选择行 | | insert | 表、列 | 插入行 | | update | 表、列 | 更新行 | | delete | 表 | 删除行 | | create | 数据库、表、索引 | 创建 | | drop | 数据库、表、视图 | 删除 | | reload | 服务器 | 允许使用flush语句 | | shutdown | 服务器 | 关闭服务 | | process | 服务器 | 查看线程信息 | | file | 服务器 | 文件操作 | | grant option | 数据库、表、存储过程 | 授权 | | references | 数据库、表 | 外键约束的父表 | | index | 表 | 创建/删除索引 | | alter | 表 | 修改表结构 | | show databases | 服务器 | 查看数据库名称 | | super | 服务器 | 超级权限 | | create temporary tables | 表 | 创建临时表 | | lock tables | 数据库 | 锁表 | | execute | 存储过程 | 执行 | | replication client | 服务器 | 允许查看主/从/二进制日志状态 | | replication slave | 服务器 | 主从复制 | | create view | 视图 | 创建视图 | | show view | 视图 | 查看视图 | | create routine | 存储过程 | 创建存储过程 | | alter routine | 存储过程 | 修改/删除存储过程 | | create user | 服务器 | 创建用户 | | event | 数据库 | 创建/更改/删除/查看事件 | | trigger | 表 | 触发器 | | create tablespace | 服务器 | 创建/更改/删除表空间/日志文件 | | proxy | 服务器 | 代理成为其它用户 | | usage | 服务器 | 没有权限 |