mysql 安全管理详情

目录
  • 1、就按单介绍
  • 2、创建用户
  • 3、删除用户账号
  • 4、访问权限
  • 5、更改口令

1、就按单介绍

MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。

换句话说,用户不能对过多的数据具有过多的访问权。

  • 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;
  • 某些用户需要读表,但可能不需要更新表;
  • 你可能想允许用户添加数据,但不允许他们删除数据;
  • 某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要;
  • 你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据;
  • 你可能想根据用户登录的地点限制对某些功能的访问。

这些都只是例子,但有助于说明一个重要的事实,即你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。

这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。

防止无意的错误 重要的是注意到,访问控制的目的不仅仅是防止用户的恶意企图。

数据梦魇更为常见的是无意识错误的结果,如错打MySQL语句,在不合适的数据库中操作或其他一些用户错误。

通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生
不要使用root 应该严肃对待root登录的使用。仅在绝对需要时使用它(或许在你不能登录其他管理账号时使用)。

不应该在日常的MySQL操作中使用root
MySQL用户账号和信息存储在名为mysql的MySQL数据库中。一般不需要直接访问mysql数据库和表(你稍后会明白这一点),但有时需要直接访问。需要直接访问它的时机之一是在需要获得所有用户账号列表
时。

为此,可使用以下代码:

use mysql;
SELECT USER FROM user;

mysql数据库有一个名为user的表,它包含所有用户账号。

user表有一个名为user的列,它存储用户登录名。新安装的服务器可能只有一个用户(如这里所示),过去建立的服务器可能具有很多用户.

用多个客户机进行试验 试验对用户账号和权限进行更改的最好办法是打开多个数据库客户机(如mysql命令行实用程序的多个副本),一个作为管理登录,其他作为被测试的用户登录。

2、创建用户

CREATE USER ben IDENTIFIED by 'ben123456';

这样就创建了一个用户。

指定散列口令 IDENTIFIED BY指定的口令为纯文本,MySQL
将在保存到user表之前对其进行加密。为了作为散列值指定口
令,使用IDENTIFIED BY PASSWORD
使用GRANTINSERT GRANT语句(稍后介绍)也可以创建用户账号,但一般来说CREATE USER是最清楚和最简单的句子。此外,也可以通过直接插入行到user表来增加用户,不过为安全起见,一般不建议这样做。

MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到MySQL服务器。因此,相对于直接处理来说,最好是用标记和函数来处理这些表

为重新命名一个用户账号,使用RENAME USER语句,如下所示:

RENAME USER ben to zhangsan;

MySQL 5之前 仅MySQL 5或之后的版本支持RENAME USER。为了在以前的MySQL中重命名一个用户,可使用UPDATE直接更新user表。

3、删除用户账号

DROP USER zhangsan;

注意:

MySQL 5之前 自MySQL 5以来,DROP USER删除用户账号和所有相关的账号权限。在MySQL 5以前,DROP USER只能用来
删除用户账号,不能删除相关的权限。因此,如果使用旧版本的MySQL,需要先用REVOKE删除与账号相关的权限,然后
再用DROP USER删除账号。

4、访问权限

在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。

CREATE USER zhangsan IDENTIFIED by 'zhang123456';

为看到赋予用户账号的权限,使用SHOW GRANTS FOR如下所示:

SHOW GRANTS FOR 'zhangsan';

结果:

GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIED BY PASSWORD '*557661E2A88A816A3155408E5D15997A8C5C7D25'

显示没有任何权限。

USAGE表 示根本没有权限(我知道,这不很直观),所以,此结果表示在任意数据库和任意表上对任何东西没有权限。

用户定义为user@host MySQL的权限用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)

为设置权限,使用GRANT语句。GRANT要求你至少给出以下信息:

  • 要授予的权限;
  • 被授予访问权限的数据库或表;
  • 用户名。

以下例子给出GRANT的用法:

GRANT SELECT ON test.* to zhangsan;

然后:

SHOW 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;
  • 特定的列;
  • 特定的存储过程。

示例:

ALL 除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 无访问权限

使用GRANTREVOKE,你能对用户可以
就你的宝贵数据做什么事情和不能做什么事情具有完全的控制。

未来的授权 在使用GRANT和REVOKE时,用户账号必须存在,但对所涉及的对象没有这个要求。

这允许管理员在创建数据库和表之前设计和实现安全措施。

这样做的副作用是,当某个数据库或表被删除时(用DROP语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。

简化多次授权 可通过列出各权限并用逗号分隔,将多条GRANT语句串在一起,如下所示:

GRANT SELECT, INSERT ON test.* to zhangsan;

5、更改口令

为了更改用户口令,可使用SET PASSWORD语句。新口令必须如下加密:

SET PASSWORD FOR zhangsan = PASSWORD('zhangsan');

修改当前用户的口令:

SET PASSWORD  = PASSWORD('root');

到此这篇关于mysql 安全管理详情的文章就介绍到这了,更多相关mysql 安全管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 怎样安全地关闭MySQL实例

    本文分析了mysqld进程关闭的过程,以及如何安全.缓和地关闭MySQL实例,对这个过程不甚清楚的同学可以参考下. 关闭过程: 1.发起shutdown,发出  SIGTERM信号 2.有必要的话,新建一个关闭线程(shutdown thread) 如果是客户端发起的关闭,则会新建一个专用的关闭线程 如果是直接收到 SIGTERM 信号进行关闭的话,专门负责信号处理的线程就会负责关闭工作,或者新建一个独立的线程负责这个事 当无法创建独立的关闭线程时(例如内存不足),MySQL Server会发出

  • 如何安全地关闭MySQL

    在关闭mysql server的时候,可能会由于关闭的方式而出现各种问题.下面的一些步骤,可以减少问题的发生. 1.停止复制 在一些特殊环境下,slave节点可能会尝试从错误的位置(position)进行启动.为了减少这种风险,要先停止io thread,从而不接收新的事件信息. mysql> stop slave io_thread; 等sql thread应用完所有的events之后,也将sql thread停掉. mysql> show slave status\G mysql>

  • 保障MySQL数据安全的一些建议

    数据是企业核心资产,数据对企业而言是最重要的工作之一.稍有不慎,极有可能发生数据无意泄露,甚至被黑客恶意窃取的风险.每年业界都会传出几起大事件,某知名或不知名的公司被脱裤(拖库的谐音,意思是整个数据库被黑客盗取)之类的. 从数据安全上也可以分为外网安全及内部操作安全,下面分别讨论一下. 内部操作安全策略 1. 是否回收DBA全部权限 试想,如果DBA没权限了,日常DB运维的活,以及紧急故障处理,该怎么实施呢?因此,建议在没有成熟的自动化运维平台前,不应该粗暴的回收DBA的太多权限,否则可能会导致

  • 年底了,你的mysql密码安全吗

    前言: 年底了,你的数据库是不是该巡检了?一般巡检都会关心密码安全问题,比如密码复杂度设置,是否有定期修改等.特别是进行等保评测时,评测机构会要求具备密码安全策略.其实 MySQL 系统本身可以设置密码复杂度及自动过期策略的,可能比较少用,大多数同学并未详细去了解.本篇文章我们一起来学习下如何设置数据库账号密码复杂度及自动过期策略. 1.密码复杂度策略设置 MySQL 系统自带有 validate_password 插件,此插件可以验证密码强度,未达到规定强度的密码则不允许被设置.MySQL 5

  • MySQL数据库重命名的快速且安全方法(3种)

    MySQL数据库重命名的方法 Innodb引擎的表如何改数据库名,MyISAM引擎又该如何操作. 如果表是MyISAM引擎可以直接去到数据库目录mv重命名文件夹就可以. Innodb完全不行,会提示相关表不存在. 第一种方法:rename database 弃用了 RENAME database old_db_name TO new_db_name 这个是5.1.7到5.1.23版本可以用的,但是官方不推荐,会有丢失数据的危险 第二种方法:mysqldump 备份 1.创建需要改成新名的数据库.

  • 如何优雅、安全的关闭MySQL进程

    前言 本文分析了 mysqld 进程关闭的过程,以及如何安全.缓和地关闭 MySQL 实例,对这个过程不甚清楚的同学可以参考下. 关闭过程 1.发起 shutdown,发出 SIGTERM 信号 2.有必要的话,新建一个关闭线程(shutdown thread) 如果是客户端发起的关闭,则会新建一个专用的关闭线程 如果是直接收到 SIGTERM 信号进行关闭的话,专门负责信号处理的线程就会负责关闭工作,或者新建一个独立的线程负责这个事 当无法创建独立的关闭线程时(例如内存不足),MySQL Se

  • mysql 安全管理详情

    目录 1.就按单介绍 2.创建用户 3.删除用户账号 4.访问权限 5.更改口令 1.就按单介绍 MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少. 换句话说,用户不能对过多的数据具有过多的访问权. 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表: 某些用户需要读表,但可能不需要更新表: 你可能想允许用户添加数据,但不允许他们删除数据: 某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要: 你可能想让用户通过存储过程访问数据,但

  • MySQL 数据类型详情

    目录 1.数值类型 1.1.数值类型分类 1.1.1.浮点数 1.1.2.位类型 1.1.3.时间日期类型 1.1.4.字符串类型 1.1.5.ENUM 类型 1.1.6.SET类型 1.数值类型 1.1.数值类型分类 严格数值类型(INTEGER.SMALLINT.DECIMAL 和 NUMERIC) 近似数值数据类型(FLOAT.REAL 和 DOUBLE PRECISION) MySQL中数值类型: 整数类型 字节 最小值 最大值 TINYINT 1 有符号-128 无符号 0 有符号 1

  • MySQL数据库必知必会之安全管理

    目录 权限表 1. user 表 2. db 表 3. tables_priv 表 4. columns_priv 表 账户管理 1. 新建普通用户 2. 删除普通用户 3. Root 用户修改自己的密码 4. Root 用户修改普通用户的密码 密码管理 1. 密码过期策略 2. 密码重用策略 角色 1. 创建角色并授权 2. 给用户添加角色 3. 编辑角色或权限 4. 删除角色 总结 权限表 MySQL 服务器通过权限表来控制用户对数据库的访问,由 mysql_install_db 脚本初始化

  • MySQL8.0.23版本的root密码重置最优解法

    该方法编辑于2021年2月7日,自己使用的版本是8.0.23,事情的起因要从袁隆平教授说起-要从一本教科书说起,有一章节是"MySQL安全管理与权限管理",其中有提到更改root账户 ps:此方法适用于任何忘记,胡乱修改或已经糟蹋root密码的同学 本着实践主义的精神,我在自己的MySQL数据库中(当前登陆为root账户)中敲下了: update user set authentication_string=MD5("123") where user = "

  • MySQL数据库体系架构详情

    目录 一.MySQL体系架构 二.网络连接层 三.数据库服务层 四.连接池 五.系统管理和控制工具 六.SQL接口 七.解析树 八.查询优化器 九.缓存 十.存储引擎层 十一.系统文件层 十二.日志文件 1.错误日志 2.通用查询日志 3.二进制日志 4.慢查询日志 十三.数据文件 1.db.opt文件 2.frm文件 3.MYD文件 4.MYI文件 5.ibd文件 6.ibdata文件 7.ibdata1文件 8.ib_logfile0和ib_logfile1文件 十四.配置文件 1.pid文

  • MySQL下载安装详情图文教程

    1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community Server进行下载. 由于目前最新版本是:MySQL Community Server 5.7.21建议博友下载历史版本,本博下载的是5.6.39下载步骤: 进入,选择MySQL的版本及主机 根据自己的电脑选择相应的位数进行下载,本机是64位,点击download. 进入下一个页面,该页面需要注册MySQL账户,也可

  • MySQL读取my.cnf的顺序问题详情

    目录 MySQL读取my.cnf的顺序 一.mysql.server启动方式 二.mysqld_safe启动方式 三.关于mysqld和my_print_defaults读取my.cnf顺序 MySQL读取my.cnf的顺序 一.mysql.server启动方式 basedir=/opt/mysql/mysql3315 datadir=/opt/mysql/mysql3315/data 进行查找,在解析参数文件的时候会带入 -e进行解析 /opt/mysql/mysql3315/bin/my_p

  • MySQL修改默认引擎和字符集详情

    目录 一.数据库引擎 1.1 查看数据库引擎 1.2 修改默认数据库引擎 二.数据库字符集 2.1 查看字符集 2.2 修改字符集 一.数据库引擎 1.1 查看数据库引擎 mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine |

  • MySQL分库分表详情

    一.业务场景介绍 假设目前有一个电商系统使用的是MySQL,要设计大数据量存储.高并发.高性能可扩展的方案,数据库中有用户表.用户会非常多,并且要实现高扩展性,你会怎么去设计? OK咱们先看传统的分库分表方式 当然还有些小伙伴知道按照省份/地区或一定的业务关系进行数据库拆分 OK,问题来了,如何保证合理的让数据存储在不同的库不同的表里呢?让库减少并发压力?应该怎么去制定分库分表的规则?不用急,这不就来了 二.水平分库分表方法 1.RANGE 第一种方法们可以指定一个数据范围来进行分表,例如从1~

  • MySQL时间类型和模式详情

    目录 1.MySQL时间类型 2.查看时区 3.非法时间值 4.严格模式 5.case汇总 当我在MySQL数据库中尝试插入一条带有时间戳的数据时报错: mysql> insert into alarm_service values (6, '1970-01-01 08:00:00'); ERROR 1292 (22007): Incorrect datetime value: '1970-01-01 08:00:00' for column 'time' at row 1 # 查看表结构 my

随机推荐