数据库用户管理
一、创建:
1.新建用户:
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
‘用户名’:指定将创建的用户名.
‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,可用通配符%
‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;若使用加密密码,需要先使用SELECT PASSWORD(‘密码’);获取密文,再在语句中添PASSWORD ‘密文’;若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)
mysql> create user 'wang'@'192.168.174.15' identified by '123123';
Query OK, 0 rows affected (0.00 sec)
mysql> select password ('123123');
+-------------------------------------------+
| password ('123123') |
+-------------------------------------------+
| *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql>
2.查看用户信息:
(1)创建后的用户保存在mysql 数据库的user表里:
mysql> use mysql;
Database changed
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+----------------+
| user | authentication_string | host |
+---------------+-------------------------------------------+----------------+
| root | *6691484EA6B50DDDE1926A220DA01FA9E575C18A | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| wang | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | 192.168.174.15 |
| riky | *ECB7B63F43CDAAF45A9AA640809447642DB634B8 | 192.168.174.15 |
+---------------+-------------------------------------------+----------------+
5 rows in set (0.00 sec)
(2)重命名指定:
rename user 'billkin'@'localhost' to 'pp'@'localhost';
(3)删除用户:
drop user 'pp'@'localhost';
(4)修改当前用户密码:
set password=password('abc123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
(5)修改其他用户密码:
set password for 'riky'@'192.168.174.15'=password('abc123');
-
忘记root密码的解决办法:
-
修改/etc/my.cnf 配置文件,免密登陆mysql
vim /etc/my.cnf [mysqld] skip-grant-tables #添加,使登录mysql不使用授权表 systemctl restart mysqld
-
mysql #直接登录,然后使用SQL语句修改密码
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root'; FLUSH PRIVILEGES; quit mysql -u root -pabc123 PS:最后再把/etc/my.cnf 配置文件里的skip-grant-tables 删除,并重启mysql服务
3.数据库用户授权:
(1)授予权限:
grant 提权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
grant all privileges on exo.phuket to 'wang'@'%' identified by 'abc123';
#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select, insert, update”。使用"all"表示所有权限,可授权执行任何操作。
#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"。例如,使用“exo.*"表示授权操作的对象为school数据库中的所有表。
#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.exo.com"、“192. 168.174.%”等。
#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空。
#允许用户billkin在本地查询phuket数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。
grant select on phuket.* to 'riky'@'localhost' IDENTIFIED BY 'abc123';
(2)允许用户wang在所有终端远程连接mysql,并拥有所有权限。
grant all privileges on *.* to 'wang'@'%' identified by 'abc123';
flush privileges; #刷新权限
quit
mysql -u wang -pabc123
use exo;
show tables; .
select * from phuket;
(3)查看权限:
mysql -u wang -pabc123
SHOW GRANTS FOR 用户名@来源地址;
show grants for 'wang'@'%';
+------------------------------------------------------+
| Grants for wang@% |
+------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'wang'@'%' |
| GRANT ALL PRIVILEGES ON "exo"."phuket" TO 'wang'@'%' |
+------------------------------------------------------+
2 rows in set (0.00 sec)
(4)撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
mysql> revoke all on *.* from 'wang'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'wang'@'%';
+------------------------------------------------------+
| Grants for wang@% |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wang'@'%' |
| GRANT ALL PRIVILEGES ON "exo"."phuket" TO 'wang'@'%' |
+------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
- 用用户wang账号登陆MySQL,测试权限是否被撤销:
(5)授权用户权限 all privileges 代表了哪些权限:
insert(插入数据)
select(查询数据)
update(更新表的数据)
delete (删除表中的数据)
drop (删除库 和表)
create (创建库,表)
index (创建索引)
alter (更改表的属性)
create view (创建视图)
create routine (创建存储过程)
alter routine (修改存储过程)
event (事件)
trigger on (创建触发器)
二、总结:
数据库用户管理权限是指在数据库系统中授权用户访问和管理数据库的权限,对于企业来说是非常重要的。以下是数据库用户管理权限的重要性:
- 数据保密性:对于用户管理权限进行精细的控制可以提高数据的保密性。通过对用户进行分组授权,可以将敏感数据的访问权限限制在需要访问的人员范围内。
- 数据可用性:通过对用户进行授权,可以保证用户仅能访问其所需的数据,而不会破坏其他数据的稳定性和完整性。同时,可以通过授权限制用户的访问频率以及数据的查询范围,从而避免系统崩溃和数据丢失等问题。
- 数据完整性:通过对用户进行精细的控制,可以保证数据完整性。例如,通过设置字段约束、验证规则和触发器等,可以保证在数据插入、修改或删除时数据的准确性。
- 数据安全性:通过对用户进行授权和管理,可以保证数据的安全性。例如,可以对登陆、访问或执行某些敏感操作需要口令验证和密码策略等。
- 合规性:对于一些特殊行业来说,例如金融业、医疗业等,有一些合规要求需要对数据进行严格的管控。通过对用户进行细致的权限分配和控制,可以避免系统漏洞或数据泄露等问题,满足合规性要求。
,通过设置字段约束、验证规则和触发器等,可以保证在数据插入、修改或删除时数据的准确性。
4. 数据安全性:通过对用户进行授权和管理,可以保证数据的安全性。例如,可以对登陆、访问或执行某些敏感操作需要口令验证和密码策略等。
5. 合规性:对于一些特殊行业来说,例如金融业、医疗业等,有一些合规要求需要对数据进行严格的管控。通过对用户进行细致的权限分配和控制,可以避免系统漏洞或数据泄露等问题,满足合规性要求。