Mysql用户管理及权限分配
早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库。结果报错了,大概是这样子的:
Access denied for user 'admin'@'%' (using password: YES) 在万能的网上搜了一下,很容易解决了。
其实就是用原来的admin账号的原因,而admin账号没有被分配访问我新建的数据库database的权限。用root用户给admin添加相应的权限,上述问题就解决了。之前对Mysql用户的管理和权限关注的比较少或者基本没有关注,调试时好多时候用root用户连接Mysql了(这样做非常不对,root是你不能登录其他管理账号才使用的)。前段时间看《Mysql必知必会》有专门一章介绍用户管理和权限分配的,安全管理。走马观花,因为实践中没遇到相关问题,所以没怎么上心。今天刚好碰到这问题了。算是基础知识了,给自己扫扫盲。
Mysql服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过多的访问权。
在计算机上装好Mysql后,会自动生成一个数据库mysql。在mysql数据里有一个表user,root用户就在自动生成并存在这个表中。账号root,密码默认为空。我本地装的是WAMP集成包,所以可以用phpmyadmin以网页的形式操作Mysql的用户和权限分配。如果你本地装了各种Mysql的使用工具,使用它们操作也是很是简单的。图形化界面更易于让人接受。这里介绍下如何在Mysql控制台也就是命令行模式下,操作这些事情。 1.创建用户账号
1.1 先看个例子。
insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
这样就为Mysql服务器创建了一个名为:test 密码为:1234 的用户。此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
注意:为了安全起见,一般不建议这样做。Mysql用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到Mysql服务器。因此,对于直接处理来说,最好是用标记和函数来处理这些表。
1.2另一种方法
CREATE USER test IDENTIFIED BY '';
这样同样创建了名为:test 密码为:1234 的用户。在创建用户账号时不一定需要密码,不过这个例子用IDENTIFIED BY '1234'给出了一个密码。IDENTIFIED BY指定的密码为纯文本,Mysql将在保存到user表之前对其进行加密。
这里创建的用户test默认是远程登录的,即插入到user表的记录Host字段为"%"。创建用户时如果想直接创建为本地访问Mysql的用户,只需在用户名标注localhost。如下:
CREATE USER test@localhost IDENTIFIED BY '1234';
并且基于1.1中‘注意’处所提到原因,推荐使用这种方法创建新的用户账号。 2.删除用户账号
为了删除一个用户账号(以及相关的权限),使用DROP USER语句,如下所示:
DROP USER test;
要说明一下的是DROP USER默认是删除的也是要远程登录的"%"用户。如果user表中存在名为test的用户,但Host不为"%"的会报错。如何删除本地访问的用户呢,同样的:
DROP USER test@localhost;
自Mysql5以来,DROP USER删除用户账号和所有的账号权限。在Mysql5之前,DROP USER只能单纯删除用户账号,不能删除相关权限。所以,使用Mysql5之前版本的,需要先REVOKE删除与账号相关的权限,然后再用DROP USER删除账号。 3.更改密码
为了更改用户的密码,可使用SET PASSWORD语句,新密码必须如此加密:
SET PASSWORD FOR test = Password('new1234');
当然可以直接操作mysql数据库里的user表来达成目的,但这是不可取的。 4.设置访问权限
4.1查看账号当前所有具有的权限。
SHOW GRANTS FOR test;
像你想象的那样,用户test同样为远程访问Mysql的用户,即Host为'%'的。 SHOW GRANTS FOR test@localhost,可查看本地访问的用户test。 4.2授予用户权限
先看一个例子。
GRANT ALL ON picture.* TO test IDENTIFIED BY "1234";
上面的操作允许test用户(默认为'%'类型用户)在picture.*(picture数据的所有表)使用所有权限,包括的权限下面再介绍。当然如果test用是不存的,该操作会先创建一个test('%')用户,然后将权限分配给它。 GRANT语句的语法:
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION;
这里要说下,GRANT的反操作为REVOKE,用它撤销用户的一个权限。 GRANT和REVOKE可在几个层次上控制访问权限。
- 整个服务器,使用GRANT ALL 和 REVOKE ALL;
- 整个数据库,使用ON database.*;
- 特定的表,使用ON database.table;
- 特定的列;
- 特定的存储过程.
要使用该语句,你需要填写下列部分:
privileges 授予用户的权限。下表列出可用于GRANT语句的权限指定符:
权限指定符 权限允许的操作
Alter 修改表和索引
Create 创建数据库和表
Delete 删除表中已有的记录
Drop 抛弃(删除)数据库和表
INDEX 创建或抛弃索引
Insert 向表中插入新行
REFERENCE 未用
Select 检索表中的记录
Update 修改现存表记录
FILE 读或写服务器上的文件
PROCESS 查看服务器中执行的线程信息或杀死线程
RELOAD 重载授权表或清空日志、主机缓存或表缓存。
SHUTDOWN 关闭服务器
ALL 所有;ALL PRIVILEGES同义词
USAGE 特殊的“无权限”权限
columns 权限运用的列,它是可选的,并且你只能设置列特定的权限。如果命令有多于一个列,应该用逗号分开它们。
GRANT ALL ON *.* TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION;
Mysql用户管理及权限分配的更多相关文章
- MySQL 用户管理与权限管理
MySQL 用户管理与权限管理 -- 操作环境mysql> show variables like 'version'; +---------------+--------+| Variabl ...
- MySQL用户管理及权限设置
mysql 用户管理和权限设置 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql ...
- centos7下mysql 用户管理和权限设置
1.进入mysql命令行,输入root及密码[root@localhost ~]# mysql -u root -pEnter password: Welcome to the MySQL monit ...
- 学习计划 mysql 用户管理与权限
最近在学习数据库的 主从复制 里面涉及到了关于用户及其管理权限的赋予,之前一直没有认真的学习这个. 现在想具体的学习一下. -- 为什么 数据库 要实现多用户管理? 举个最简单的例子,你需要和第三方做 ...
- MySQL 用户管理及权限管理
MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...
- MySQL用户管理及权限管理
MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...
- mysql 用户管理和权限设置
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- MySQL用户管理和权限设置
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- Oracle 用户管理与权限分配
用户管理是系统管理员最基本的任务之一,用户想要连接数据库并且使用相应的系统资源就必须是系统的合法用户且具有对应的权限. 1 创建用户 default tablespace default_tables ...
随机推荐
- mysql操作遇到的坑(第一版)
1.当我们要统计数据表数量时,如果遇到多表查询,会出现一个主表对应多个子表的维度,我们会用到group by,但是不要再用统计函数去操作数据,因为统计还是会统计原数据 案例 SELECT sum(`o ...
- Linux上编译安装PHP
这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...
- SpringBootSecurity学习(17)前后端分离版之 OAuth2.0 数据库(JDBC)存储客户端
自动批准授权码 前面我们授权的流程中,第一步获取授权码的时候,都会经历一个授权是否同意页面: 这个流程就像第三方登录成功后,提问是否允许获取昵称和头像信息的页面一样,这个过程其实是可以自动同意的,需要 ...
- flask+阿里云短信服务实现注册发送手机验证码
效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...
- [WP8.1]RSA 使用BouncyCastle 公钥解密
写应用的时候遇到个服务器返回私钥加密过的数据 ,然后要在客户端用公钥解密的需求 ,一直没找到方法,应用搁置了一个学期,多方搜索,结论就是.net没有实现公钥解密的方法,要自己实现,于是硬着头皮开始看 ...
- 【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- git分支的创建、删除、切换、合并
需求背景 开发新功能和修改bug一般放在新建分支,如果觉得可行,可以合并到master分支上. 方式 1.查看分支 git branch (查看本地分支及当前所属分支) git branch -a ( ...
- 【TencentOS tiny】又有一个操作系统开源
新闻 2019年9月18日,腾讯宣布将开源 自主研发的轻量级物联网实时操作系统TencentOS tiny.相比市场上其它系统,腾讯TencentOS tiny在资源占用.设备成本.功耗管理以及安全稳 ...
- dp复习 背包[礼物]
[问题描述]人生赢家老王在网上认识了一个妹纸,然后妹纸的生日到了,为了表示自己的心意,他决定送她礼物.可是她喜爱的东西特别多,然而他的钱数有限,因此他想知道当他花一定钱数后剩余钱数无法再购买任何一件剩 ...
- Spring Security 动态url权限控制(三)
一.前言 本篇文章将讲述Spring Security 动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限 基本环境 spring-boot 2.1.8 mybatis-p ...