各位用户为了找寻关于mysql 安全管理详情的资料费劲了很多周折。这里教程网为您整理了关于mysql 安全管理详情的相关资料,仅供查阅,以下为您介绍关于mysql 安全管理详情的详细内容
目录
1、就按单介绍 2、创建用户 3、删除用户账号 4、访问权限 5、更改口令
1、就按单介绍
MySQL
服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。
换句话说,用户不能对过多的数据具有过多的访问权。
多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表; 某些用户需要读表,但可能不需要更新表; 你可能想允许用户添加数据,但不允许他们删除数据; 某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要; 你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据; 你可能想根据用户登录的地点限制对某些功能的访问。这些都只是例子,但有助于说明一个重要的事实,即你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。
这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。
防止无意的错误 重要的是注意到,访问控制的目的不仅仅是防止用户的恶意企图。
数据梦魇更为常见的是无意识错误的结果,如错打MySQL语句,在不合适的数据库中操作或其他一些用户错误。
通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生 不要使用root 应该严肃对待root登录的使用。仅在绝对需要时使用它(或许在你不能登录其他管理账号时使用)。
不应该在日常的MySQL
操作中使用root
。
MySQL用户账号和信息存储在名为mysql
的MySQL数据库中。一般不需要直接访问mysql
数据库和表(你稍后会明白这一点),但有时需要直接访问。需要直接访问它的时机之一是在需要获得所有用户账号列表
时。
为此,可使用以下代码:
? 1 2use mysql;
SELECT
USER
FROM
user
;
mysql
数据库有一个名为user
的表,它包含所有用户账号。
user表有一个名为user
的列,它存储用户登录名。新安装的服务器可能只有一个用户(如这里所示),过去建立的服务器可能具有很多用户.
用多个客户机进行试验 试验对用户账号和权限进行更改的最好办法是打开多个数据库客户机(如mysql
命令行实用程序的多个副本),一个作为管理登录,其他作为被测试的用户登录。
2、创建用户
? 1CREATE
USER
ben IDENTIFIED
by
'ben123456'
;
这样就创建了一个用户。
指定散列口令 IDENTIFIED BY
指定的口令为纯文本,MySQL
将在保存到user表之前对其进行加密。为了作为散列值指定口
令,使用IDENTIFIED BY PASSWORD
。
使用GRANT
或INSERT GRANT
语句(稍后介绍)也可以创建用户账号,但一般来说CREATE USER
是最清楚和最简单的句子。此外,也可以通过直接插入行到user表来增加用户,不过为安全起见,一般不建议这样做。
MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到MySQL服务器。因此,相对于直接处理来说,最好是用标记和函数来处理这些表
为重新命名一个用户账号,使用RENAME USER语句,如下所示:
? 1RENAME
USER
ben
to
zhangsan;
MySQL 5之前 仅MySQL 5或之后的版本支持RENAME USER。为了在以前的MySQL中重命名一个用户,可使用UPDATE直接更新user表。
3、删除用户账号
? 1DROP
USER
zhangsan;
注意:
MySQL 5之前 自MySQL 5以来,DROP USER删除用户账号和所有相关的账号权限。在MySQL 5以前,DROP USER只能用来 删除用户账号,不能删除相关的权限。因此,如果使用旧版本的MySQL,需要先用REVOKE删除与账号相关的权限,然后 再用DROP USER删除账号。
4、访问权限
在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。
? 1CREATE
USER
zhangsan IDENTIFIED
by
'zhang123456'
;
为看到赋予用户账号的权限,使用SHOW GRANTS FOR
,如下所示:
SHOW GRANTS
FOR
'zhangsan'
;
结果:
? 1GRANT
USAGE
ON
*.*
TO
'zhangsan'
@
'%'
IDENTIFIED
BY
PASSWORD
'*557661E2A88A816A3155408E5D15997A8C5C7D25'
显示没有任何权限。
USAGE表 示根本没有权限(我知道,这不很直观),所以,此结果表示在任意数据库和任意表上对任何东西没有权限。
用户定义为user@host MySQL的权限用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)
为设置权限,使用GRANT语句。GRANT要求你至少给出以下信息:
要授予的权限; 被授予访问权限的数据库或表; 用户名。以下例子给出GRANT的用法:
? 1GRANT
SELECT
ON
test.*
to
zhangsan;
然后:
? 1 2SHOW GRANTS
FOR
zhangsan;
GRANT
SELECT
ON
`test`.*
TO
'zhangsan'
@
'%'
每个GRANT添加(或更新)用户的一个权限。MySQL读取所有授权,并根据它们确定权限。
GRANT
的反操作为REVOKE,用它来撤销特定的权限。下面举一个例子:
REVOKE
SELECT
ON
test.*
FROM
zhangsan;
这条REVOKE语句取消刚赋予用户bforta的SELECT访问权限。被撤销的访问权限必须存在,否则会出错。
GRANT和REVOKE可在几个层次上控制访问权限:
整个服务器,使用GRANT ALL和REVOKE ALL; 整个数据库,使用ON database.*; 特定的表,使用ON database.table; 特定的列; 特定的存储过程。示例:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31ALL
除
GRANT
OPTION
外的所有权限
ALTER
使用
ALTER
TABLE
ALTER
ROUTINE 使用
ALTER
PROCEDURE
和
DROP
PROCEDURE
CREATE
使用
CREATE
TABLE
CREATE
ROUTINE 使用
CREATE
PROCEDURE
CREATE
TEMPORARY
TABLES
使用
CREATE
TEMPORARY
TABLE
CREATE
USER
使用
CREATE
USER
、
DROP
USER
、RENAME
USER
和
REVOKE
ALL
PRIVILEGES
CREATE
VIEW
使用
CREATE
VIEW
DELETE
使用
DELETE
DROP
使用
DROP
TABLE
EXECUTE
使用CALL和存储过程
FILE 使用
SELECT
INTO
OUTFILE和
LOAD
DATA INFILE
GRANT
OPTION
使用
GRANT
和
REVOKE
INDEX
使用
CREATE
INDEX
和
DROP
INDEX
INSERT
使用
INSERT
LOCK TABLES 使用LOCK TABLES
PROCESS 使用SHOW
FULL
PROCESSLIST
RELOAD 使用FLUSH
REPLICATION CLIENT 服务器位置的访问
REPLICATION SLAVE 由复制从属使用
SELECT
使用
SELECT
SHOW DATABASES 使用SHOW DATABASES
SHOW
VIEW
使用SHOW
CREATE
VIEW
SHUTDOWN 使用mysqladmin shutdown(用来关闭MySQL)
SUPER 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER
和
SET
GLOBAL
。还允许mysqladmin调试登录
UPDATE
使用
UPDATE
USAGE 无访问权限
使用GRANT
和REVOKE
,你能对用户可以
就你的宝贵数据做什么事情和不能做什么事情具有完全的控制。
未来的授权 在使用GRANT和REVOKE时,用户账号必须存在,但对所涉及的对象没有这个要求。
这允许管理员在创建数据库和表之前设计和实现安全措施。
这样做的副作用是,当某个数据库或表被删除时(用DROP语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。
简化多次授权 可通过列出各权限并用逗号分隔,将多条GRANT语句串在一起,如下所示:
? 1GRANT
SELECT
,
INSERT
ON
test.*
to
zhangsan;
5、更改口令
为了更改用户口令,可使用SET PASSWORD语句。新口令必须如下加密:
? 1SET
PASSWORD
FOR
zhangsan =
PASSWORD
(
'zhangsan'
);
修改当前用户的口令:
? 1SET
PASSWORD
=
PASSWORD
(
'root'
);
到此这篇关于mysql 安全管理详情的文章就介绍到这了,更多相关mysql 安全管理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://www.cnblogs.com/aoximin/p/15365055.html