Mysql用户、权限基操


初始话安装 mysql 之后,大多数版本会为你本机创建一个名为root的用户,这个用户是一个管理员账户,拥有至高无上的权限,而且大多数mysql版本在当前服务器上创建的这个root用户是没有密码的。你说那不是不安全么,其实也还好,因为这root用户只能在当前服务器上登录,通过远程的方式是链接不上的。所以只要没有服务器的登录权限,就没有服务器上数据库的登录权限,不过我还是建议在安装好数据库后立马给root用户设置一个密码,以加强数据库的安全。如果可以最好在创建一个用户,用来替代root用户作为管理员,然后吧root账户给降级或者删除掉。比如你可以叫Alice 或者 叫Bob ,这样就会更加安全,因为按照惯例,如果有人攻破了你的服务会第一时间用root作为账户名开始暴力破击你的数据库密码。

给初始root用户设置密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

无需密码就能登录数据库
现在需要密码才能登录了

查看当前数据库的用户

查看所有用户

select * from mysql.user

这完全没办法看呀

查看所有用户,只返回 User,Host

select User,Host from mysql.user

默认用户
可以看到 默认 只有 4 个用户,其中一个就是 root , 其他几个我们基本用不到,也不要去手动干预他们,否则会有意想不到的后果,虽然我也不知道会怎样。

查看数据库用户的权限

show grants for 'mysql.sys'@'localhost'
show grants for 'root'@'localhost'

root 权限也没办法看,展示不友好

小技巧 ,在 sql 的后面 加个 \G 使用垂直方式显示,每行一个字段,更易于阅读。 注意在数据量小的时候好一点。
使用垂直方式查看
可以看到 root 用户激活拥有了所有的权限。

***************************[ 1. row ]***************************
Grants for root@localhost | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION
***************************[ 2. row ]***************************
Grants for root@localhost | GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` WITH GRANT OPTION
***************************[ 3. row ]***************************
Grants for root@localhost | GRANT PROXY ON ``@`` TO `root`@`localhost` WITH GRANT OPTION

创建用户

MySQL 创建用户的基本语法如下:

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  • 指定多个主机名或 IP 地址:您可以使用多个 ‘主机名’ 或 ‘IP地址’ 来允许用户从多个主机或 IP 地址连接。例如:
CREATE USER '用户名'@'主机名1,主机名2,IP地址1,IP地址2' IDENTIFIED BY '密码';
  • 指定所有主机都可以连接,用通配符 %。例如:
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';

指定默认的身份验证插件:您可以使用 WITH plugin_name 选项来指定用户的默认身份验证插件。例如:

CREATE USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '密码';
  • 指定用户的默认角色:您可以使用 DEFAULT ROLE role_name 选项来指定用户的默认角色。例如:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码' DEFAULT ROLE 'role_name';
  • 指定用户的最大连接数和并发连接数:您可以使用 MAX_CONNECTIONS 和 MAX_USER_CONNECTIONS 选项来限制用户的最大连接数和并发连接数。例如:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码' WITH MAX_CONNECTIONS 10 MAX_USER_CONNECTIONS 5;

创建用户并用新用户登录
我们在查看一下用户
查看用户

删除用户

只有具有足够权限的用户才能删除其他用户。如果您没有足够的权限,请使用具有适当权限的用户执行此操作。 一般用root用户来操作,尽量不要把删除、更新用户信息的权限随便授予某一个用户。

DROP USER '用户名'@'主机名';

删除用户操作示例

给用户授权

查看一下各自有权限的数据库

基本语法
授予数据库的所有权限

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

授予特定权限而不是所有权限,可以根据需要更改 ALL PRIVILEGES 部分

GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost';

刷新 MySQL 权限, 这一步是使 权限 生效的,类似 我们改了 linux 配置 是有 source 命令一样。

FLUSH PRIVILEGES;

赋权了,然后就可以看到了

取消用户授权

使用 REVOKE 命令来取消用户的权限。例如,如果要取消用户 ‘username’@‘localhost’ 对所有数据库的所有权限:

REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';

如果要取消用户对特定数据库的权限,可以指定数据库名称:

REVOKE ALL PRIVILEGES ON database.* FROM 'username'@'localhost';

评论