MySQL必知必会 学习笔记 第二十八章 安全管理

用户应该对他们所需要的数据具有适当的访问权,既不能多也不能少。

MySQL Administrator提供了图形界面,可用来管理用户和账号权限。

MySQL创建一个名为root的用户账号,它对整个MySQL服务器由完全的控制。在日常工作中,决不能使用root,而应创建一系列账号供不同用户使用,防止恶意或无意地破坏数据库。

MySQL的用户账号和信息存储在名为mysql的数据库中,获取所有用户的账号列表:

USE mysql;
SELECT user FROM user;

user表中包含所有用户账号,表中user列存储用户登录名,新服务器可能只有一个root用户。

更改权限时最好打开多个数据库客户机,一个更改权限,一个测试被更改的权限。

创建新用户:

CREATE USER ben IDENTIFIED BY 'password';

以上创建了新用户ben,密码是password。

IDENTIFIED BY指定的密码为纯文本,MySQL将其保存在user表之前对进行了加密。以加密后的散列值作为口令要使用IDENTIFIED BY PASSWORD。

GRANT语句也可以创建用户,但CREATE USER更简单和清楚。也可以直接向user表中插入行来增加用户,但为了安全,不要这么做,MySQL存储用户账号信息的表和表模式极为重要,对它们的破坏会破坏MySQL服务器,因此最好使用指令和函数处理这些表。

重命名一个用户:

RENAME USER oldName TO newName;

MySQL 5之后才支持RENAME USER语句。在此之前为了重命名一个用户,需要使用UPDATE语句直接更新user表。

删除用户账号和相关权限:

DROP USER userName;

DROP USER在MySQL 5之后才支持,在此之前,DROP USER只能用来删除用户账号,不能删除相关权限,因此旧版本需要先REVOKE删除此账号的权限,在删除用户。

创建用户后,要分配访问权限,否则新用户只能登录MySQL,不能看到数据,也不能执行任何数据库操作。查看用户的权限:

SHOW GRANTS FOR userName;

在这里插入图片描述
输出显示用户ben有权限USAGE ON *.*,USAGE表示没有权限,此结果表示在任意数据库和任意表上对任何东西都没有权限。

MySQL的权限用用户名和主机名结合定义,如果不指定主机名,默认值%,它表示授予用户访问权限而不管主机名。

授予权限:

GRANT SELECT ON crashcourse.* TO ben;

上例授予ben对数据库crashcourse中所有表上的SELECT权限。

撤销权限:

REVOKE SELECT ON crashcourse.* FROM ben;

被撤销的权限必须存在,否则报错。

可授予和撤销的权限:
在这里插入图片描述
在这里插入图片描述
使用GRANT和REVOKE时,用户账号必须存在,但所涉及的数据库或表等对象不必存在,这允许管理员在创建数据库和表前先设计和实现安全措施。副作用为删除某个库或表时,相关的访问权限仍存在,如果重建同名库或表,权限仍起作用。

简化多次授权:

GRANT SELECT, INSERT ON crashcourse.* TO bforta;

更改用户口令:

SET PASSWORD FOR bforta = Password('密码');

新口令必须使用Password函数加密。

更改自己的口令:

SET PASSWORD = Password('密码');

猜你喜欢

转载自blog.csdn.net/tus00000/article/details/111803406
今日推荐