Java登陆第八天——SQL之DCL

发布时间 2023-11-16 17:00:23作者: ocraft

SQL语句

SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)

DDL——数据定义语言。用于定义数据的结构。 指的是增,删,改数据库
DML——数据操作语言。用于检索或修改数据。 指的是增,删,改数据
DQL——数据查询语言。用于查询各种形式的数据。 指的是查询数据
DCL——数据控制语言。用于定义数据库用户的权限。 指的是管理数据库权限

SQL大小写不敏感!!
SQL大小写不敏感!!
SQL大小写不敏感!!

全凭个人习惯

DCL

专门用来管理用户权限的SQL。

用户权限表存储在名叫mysql库中的user表。

(可以通过库名.表名来访问,user表中列太多了,仅展示部分)
image
host:登陆IP。(localhost等价127.0.0.1,本地)
user:用户名。
authentication_string:密码。(mysql自行加密密码)

用户管理

--创建用户。(如果不指定ip,默认为%。表示任意IP)
create user 用户名 @ IP identified by '密码';

--删除用户(mysql把 用户名@IP 当作一个完整的用户信息)
drop user 用户名 @ IP;

--修改自己的密码(使用password()函数对密码进行加密)
set password = password('新密码');

--修改其他用户密码(需要拥有权限)
set password for 用户名@IP = password('密码');

栗子:创建用户opq,密码456。
再查看mysql.user表

SQL语句:

create user opq identified by 456;

程序运行结果:
image

栗子:登陆opq用户,查看所有数据库

SQL语句:

mysql -u opq -p
456
show databases;

程序运行结果:
image
这是因为不同的用户,操作的数据库和数据表表不同。

对于没有权限的库或表,用户是无法访问和读写的。
在上述栗子基础上,使用opq用户修改密码为789

SQL语句:

set password = password('789');

程序运行结果:
image
至此,下次登陆opq用户,其密码就是789。

权限管理

常用权限如下:

权限名 描述
ALL 除"授予权限"之外所有的权限
alter 修改表
create 创建表
drop 删除表
select 查询数据
insert 插入数据
update 更新数据
delete 删除数据
show databases 查看所有数据库
grant option 授予权限
--授权用户。
grant 权限1,... on 库.对象名 to 用户名@IP [identified by '密码'];
/*
test.*:test库中所有对象(表,视图等)。
*.*:所有库的所有对象
identified by可以省略。
如果写了identified by,有两种情况:
	1.如果该用户存在,就修改该用户密码并授权。
	2.如果该用户不存在,就创建该用户并授权。
*/

--撤回权限(mysql把 用户名@IP 当作一个完整的用户信息)
revoke 权限1,... on 库.对象 from 用户名@IP;

--刷新权限(mysql低于5.7,需要手动刷新权限)
flush privileges;

准备数据

--root用户
create database tt;

--使用库名.表名
create table tt.t10(
id int primary key,
name varchar(32)
);

insert into tt.t10 values(1001,'张三');
insert into tt.t10 values(1002,'李四');

image

登陆opq用户,此时opq无法访问tt库。
栗子:使用root用户授权opt,tt中的t10表。权限:select,insert
opq用户插入数据(1003,'王五')
最后查询t10表所有数据

SQL语句:

--opq用户
show databases;

--root用户
grant select,insert on tt.t10 to opq;

--opq用户再次查询所有数据。正确查询出tt库。
show databases;

insert into tt.t10 values (1003,'王五');
select * from tt.t10;

程序运行结果:
image

栗子:使用root用户撤回opq的tt.t10表所有权限
使用opq查询所有数据库
最后使用root用户删除opq用户

SQL语句:

--root
revoke all on tt.t10 from opq;

--opq
select * from tt.t10;
show databases;

--root
drop user opq;

程序运行结果:
image
opq会话关闭后,再也无法登陆。