1. 用户
操作数据库的时候和使用Linux一样,不建议直接使用
root
,使用普通用户权限,这样更加安全
1.1 用户信息
在mysql
数据库下,这个库里面会自带各种表
里面user
表里面,就记录了用户信息
- **
host
:**用户可以从哪个主机登录,localhost
表明只能从本机登录 - **
user
:**用户名 authentication_string
:password
函数加密之后的
所谓的新增、删除、修改用户信息,就是在这个表里面增删查改
1.2 创建用户
语法:
create user '用户名'@'登录主机/IP' identified by '密码'
本机登录:
如果出现报错:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
采用
flush privileges
刷新权限,创建完毕之后也可以刷新一下,保证是有效的
任意主机登录:
由于设置的是localhost
,所以只能本地登录
如果想设置任意主机登录,采用%
create user 'pyh'@'%' identified by '111222';
Windows的IP是私有IP,经过多次路由转发之后,源地址就不再有效了,所以直接用
%
,表明任意主机但是这个操作一般是禁止的,太危险了
设置密码的操作,
mysql
命令行一般不会记录下来,即往上翻是翻不到的
Windows登录:
1.3 删除用户
语法:
drop user '用户名'@'主机名'
1.4 修改密码
语法
自己设置自己的密码:
set password=password('新密码');
root用户修改指定用户密码:
set password for '用户名'@'主机名'=password('新密码');
本质上就是
update
update user set authentication_string=password('112233');
2. 数据库权限
2.1 给用户权限
新创建的用户,是没有任何权限的,需要给用户授权
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登录主机' [identified by '密码']
权限列表用逗号
,
隔开grant select on ... grant select, delete, create on ... grant all [privileges] on *.* to ... #赋予所有权限,所有的库所有的表
查看赋予了哪些权限:
mysql> show grants for 'pyh'@'localhost';
+--------------------------------------------------------------+
| Grants for pyh@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pyh'@'localhost' |
| GRANT ALL PRIVILEGES ON `rootDB`.`user` TO 'pyh'@'localhost' |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)
这里给了所有权限
2.2 回收权限
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
再次查看赋予的权限:
mysql> show grants for 'pyh'@'localhost';
+-----------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for pyh@localhost |
+-----------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pyh'@'localhost' |
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `rootDB`.`user` TO 'pyh'@'localhost' |
+-----------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
insert
权限被回收
移除所有权限:
3. 跳过权限验证
如果忘记root
的密码,在/etc/my.cnf
配置文件下,可添加skip-grant-tables
然后重启mysql
服务即可
systemctl stop mysqld
systemctl start mysqld
之后登录就可以跳过权限验证(不是很建议这样做)