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 ...
随机推荐
- 魔鬼在细节,理解Java并发底层之AQS实现
jdk的JUC包(java.util.concurrent)提供大量Java并发工具提供使用,基本由Doug Lea编写,很多地方值得学习和借鉴,是进阶升级必经之路 本文从JUC包中常用的对象锁.并发 ...
- 栈二:包含min函数的栈
/** * 题目:包含min函数的栈 * 描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. * 注:用data来保存数据,用另一个栈min保存依次入栈最小的数 * ...
- java第3天:Scanner,Random,ArrayList
第一章:Scanner从入门到放弃 1 API的概述和使用步骤 API简称应用程序编程接口,是JDK给我们提供好的可以直接使用的类和方法,是程序员随手使用的字典. *** 2 Scanner的概述 2 ...
- Azure pipeline 配置根据条件执行脚本
Azure pipeline 配置根据条件执行脚本 Intro 我的应用通过 azure pipeline 来做持续集成,之前已经介绍了根据不同分支去打包不同的package,具体的就不再这里详细介绍 ...
- C# ManualResetEvent用法
ManualResetEvent表示线程同步事件,可以对所有进行等待的线程进行统一管理(收到信号时必须手动重置该事件) 其构造函数为: public ManualResetEvent (bool in ...
- MySQL 配置环境
MySQL 显示 Can't connect to MySQL server on 'localhost' (10061)怎么解决 在cmd中配置启动sql后,找不到密码.然后怎么也没办法弄,不知道怎 ...
- bugku--web--输入密码查看flag
首先打开网页链接 随机五位数的密码爆破,先用python写一个脚本来生成随机五位数: x=range(0,10) f=open("3.txt",'w') for i in x: f ...
- conversion function——转换函数
类型转换函数 与 explicit关键字 1.类型转换函数 在C++中,可以使用构造函数将一个指定类型的数据转换为类的对象,也可以使用类型转换函数 (type conversion function) ...
- Qt5教程: (5) Lambda匿名函数的使用
Lambda是C++11的新特性, 首先看看你的.pro项目文件里有没有CONFIG += c++11这句话, 没有就加上. 下面新建一个工程, 具体步骤就不多说了 然后给主窗口添加一个按钮b, 并且 ...
- [BZOJ1116] CLO
1116: [POI2008]CLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1311 Solved: 709[Submit][Status] ...