Java登陆第八天——SQL之DCL
SQL语句
SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)
DDL——数据定义语言。用于定义数据的结构。 指的是增,删,改数据库
DML——数据操作语言。用于检索或修改数据。 指的是增,删,改数据
DQL——数据查询语言。用于查询各种形式的数据。 指的是查询数据
DCL——数据控制语言。用于定义数据库用户的权限。 指的是管理数据库权限
SQL大小写不敏感!!
SQL大小写不敏感!!
SQL大小写不敏感!!
全凭个人习惯
DCL
专门用来管理用户权限的SQL。
用户权限表存储在名叫mysql库中的user表。
可以通过库名.表名来访问具某库某表。
(user表中列太多了,仅展示部分)
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;
程序运行结果:
栗子:登陆opq用户,查看所有数据库
SQL语句:
mysql -u opq -p
456
show databases;
程序运行结果:
这是因为不同的用户,操作的数据库和数据表表不同。
对于没有权限的库或表,用户是无法访问和读写的。
在上述栗子基础上,使用opq用户修改密码为789
SQL语句:
set password = password('789');
程序运行结果:
至此,下次登陆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,'李四');
登陆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;
程序运行结果:
栗子:使用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;
程序运行结果:
opq会话关闭后,再也无法登陆。