MySQL的数据其实也以文件形式保存,而登录信息同样保存在文件中
MySQL的数据在Linux下默认路径是/var/lib/mysql
登录MySQL同样也可以查询用户信息
用户信息在数据库mysql中的user表中
--以一定形式显示数据
select * from user\G;
*************************** 1. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *BFD88FA31A402F8526DC79248D12DB3105F91D0B
password_expired: N
password_last_changed: 2023-09-27 21:29:37
password_lifetime: NULL
account_locked: N
提炼其中比较关键的几个属性
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *BFD88FA31A402F8526DC79248D12DB3105F91D0B |
+-----------+---------------+-------------------------------------------+
host
:表示这个用户可以从哪个主机登录。localhost代表只能本地登录
user
:用户名
authentication_string
:登录密码通过password函数加密形成的秘钥字符串
create user '用户名'@'登录主机/ip' identified by '密码';
案例;
mysql> create user 'ljh'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.03 sec)
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *BFD88FA31A402F8526DC79248D12DB3105F91D0B |
| localhost | ljh | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+---------------+-------------------------------------------+
localhost
:代表只能本地主机登录
%
:代表可以从任意主键登录
具体主机ip
:只能从该主机登录
注意:非常不建议给用户的主机名设置为%
drop user '用户名'@'主机名'
删除时需要指明主机名,不然默认主机名是’%’
set password=password('新的密码');
set password for '用户名'@'主机名'=password('新的密码');
MySQL有这些权限:
常用的也就是增删查改,create,drop,delete,alter,insert等等
刚创建的用户没有任何权限
语法:
grant 权限列表 on 库名.对象 to '用户名'@'登录主机';
单权限:
grant select on ...
多权限:grant select,delete ...
权限之间用逗号隔开
全部权限:grant all on ...
/ * . *:代表本系统中所有数据库的所有对象(表,视图,存储过程等)
库 . *:表示某个数据库中的所有对象
案例:
先创建一个用户
mysql> create user 'ljh'@'localhost' identified by '密码'
登录该用户
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
此时我们查看不了其他的表
我们可以使用root用户赋权
mysql> grant create on *.* to 'ljh'@'localhost';
如此ljh用户就有查表建表的权限了
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| README_DBDF |
| bit_index |
| mysql |
| performance_schema |
| scott |
| sys |
| test_demo |
| tmp1 |
| tmp2 |
+--------------------+
如果发现赋权后,没有生效,执行如下指令
flush privileges;
如果还没有生效,可以尝试退出重登
语法:
mysql> show grants for 'ljh'@'localhost';
+------------------------------------------+
| Grants for ljh@localhost |
+------------------------------------------+
| GRANT CREATE ON *.* TO 'ljh'@'localhost' |
+------------------------------------------+
注意,root用户可以查看任意用户的权限,普通用户只能查看自己的权限
测试发现,如果一个普通用户有所有权限,也可以查看其他用户的权限
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登录主机';
ljh用户原本的权限:
mysql> show grants for 'ljh'@'localhost';
+--------------------------------------------------+
| Grants for ljh@localhost |
+--------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'ljh'@'localhost' |
+--------------------------------------------------+
我们回收drop权限
revoke drop on *.* from 'ljh'@'localhost';
因为原本是有all所有权限的,回收drop后,会显示剩余所有权限
感谢看到此处
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。