2.1创建或更改账号
语句命令方式
有两种方法:
- 使用GRANT语法创建(推荐)
- 直接insert,update权限表
GRANT 权限类型列表 on object_type {表名称|*|*.*|db_name.*} to user [identified by password ‘密码’][,user [identified by password ‘密码’] …. with grant option; 其中:object_type = TABLE | FUNCTION | PROCEDURE |
示例:
例1:创建用户admin,权限为可以在所有数据库上执行所有权限,但只能从本地进行连接
GRANT ALL PRIVILEGES ON *.* TO admin@localhost; |
可以发现除了Grant_priv权限外,所有权限在user表里面都是Y.
例2:在例1基础上,增加对admin的grant权限
GRANT ALL PRIVILEGES ON *.* TO admin@localhost WITH GRANT OPTION; |
例3:在例2基础上,设置密码为“123”
GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY ‘123’ WITH GRANT OPTION; |
例4:创建新用户chai,可以从任何IP进行连接,权限为对test数据库的所有表进行SELECT、UPDATE、INSERT、DELETE操作,初始密码为“123”
GRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO ‘chai’@’%’ IDENTIFIED BY ‘123’; |
发现此例,user表中权限都是N,db表中增加的记录权限则都是Y。
注意:
- mysql数据库的user表中user的值为空,表示所有用户都可以连接(此处不能用*,*表示用户名为*的用户了)
- mysql数据库的user表中host的值为*或空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此如果要包括本地服务器,必须单独为localhost赋予权限。如果host的值为%,表示所有IP,包括本地服务器localhost。
Host值 |
User值 |
被条目匹配的连接 |
‘thomas.loc.gov’ |
‘fred’ |
fred,从thomas.loc.gov连接 |
‘thomas.loc.gov’ |
‘’ |
任何用户,从thomas.loc.gov连接 |
‘%’ |
‘fred’ |
fred,从任何主机连接 |
‘%’ |
‘’ |
任何用户,从任何主机连接 |
‘%.loc.gov’ |
‘fred’ |
fred,从在loc.gov域的任何主机连接 |
‘x.y.%’ |
‘fred’ |
fred,从在x.y.net,x.y.com等主机连 |
‘144.155.166.177’ |
‘fred’ |
fred,从144.155.166.177的IP地址连接 |
‘144.155.166.%’ |
‘fred’ |
fred,从‘144.155.166.*的C类子网的任何主机连接 |
如果有多个匹配,服务器必须选择使用哪个条目,按照下述原则来解决:
- 服务器在启动时读入user表后进行排序
- 首先以最具体的host值排序,%排后面,如果host相同,以最具体的user值排序,空User值排后面。
- 服务器使用与客户端和用户名匹配的第一行
navicat图形化界面
1、新建用户
2、填写用户名、主机和密码
3、配use表的安全列和资源权限列的信息
0表示不限制
4、选择user表的权限,这是针对所有数据库的全局权限
5、也可以设置单独某个数据库或某个表,或某个列的权限
SQLyog图形化界面
1、新建用户
2、填写用户名密码和资源权限等
3、全局权限
4、某个库或某个表等局部权限
2.2查看账户权限
show grants for user@host;
2.3删除用户
drop user 用户名;
经典问题
1、在命令行出现乱码问题
按照数据库时选择utf8, 而我们在windows下窗口是GBK的,因此,需要在命令行客户端声明字符集.
set names gbk;是为了告诉服务器,客户端用的GBK编码,防止乱码.
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)
可以查看字符集
mysql> show variables like ‘character_set_%’;
2、退出当前错误语句
语句打错以后应该退出本语句,再继续打新语句.
也可以打\c,快速退出本语句.
3、如何破解数据库的密码?安全模式登录
- 通过任务管理器或者服务管理,关掉mysqld(服务进程)
- 通过命令行+特殊参数开启mysqld
mysqld –skip-grant-tables
- 此时,mysqld服务进程已经打开,并且,不需要权限检查.
4、mysql -uroot 无密码登陆服务器.
5: 修改权限表
- use mysql;
- update user set Password = password(‘123456’) where User = ‘root’;
- flush privileges;
6:通过任务管理器,关掉mysqld服务进程.
7:再次通过服务管理,打mysql服务。
8:即可用修改后的新密码登陆.
上一篇: Java培训权限系统的工作原理
下一篇: 大数据培训课程Sqoop安装