首页 > 数据库 >Java登陆第八天——SQL之DCL

Java登陆第八天——SQL之DCL

时间:2023-11-16 17:02:09浏览次数:41  
标签:DCL Java opq -- tt 用户 SQL 权限

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会话关闭后,再也无法登陆。

标签:DCL,Java,opq,--,tt,用户,SQL,权限
From: https://www.cnblogs.com/Ocraft/p/17836720.html

相关文章

  • 微服务 在 Java 代码中发送 http 请求(跨服务远程调用)
    1.注册RestTemplate对象到Spring容器中(Bean的注入只能放在配置类里,而启动类本身就是配置类)@SpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,......
  • Java获取笔记本的wifi地址
    几个方法说明(来源网络,没有验证)isAnyLocalAddress方法当IP地址是通配符地址时返回true,否则返回false.这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有。使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接。IPv4的通配符地址是0.0.0.0.IPv6的通......
  • mysql单点多实例部署方式
    一、清理环境清理方式与mysql-部署相同二、部署1.创建mysql目录mkdir/root/softcd/root/soft2.下载安装包并解压wgethttps://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gztar-xfmysql-5.7.28-linux-glibc2.12-x86_64.tar.gz-C/o......
  • sql只根据某一字段去重,并保留其他字段
    SQL只根据某一个字段去重并保留其他字段,要实现此需求的关键是用到两个函数,分别为:groupby与max()groupby的目的是分组从而达到去重的效果,max()的目的是取分组重复的字段中取出随机的一条数据(比如说这里用的max()意思是取某一字段最大的,或者也可以用其他只能获取一条数据的函数......
  • window下mysql更换端口号
    我的情况是:本机原来安装了5版本,现在需要用8版本,因此机器同时存在了两个sql版本,一个占用了3306端口,一个占用了3307端口,但是后端默认配置的是3306端口,需要灵活更改版本和端口号。开始吧,安全的更换mysql的端口号,5和8版本都是一样的操作。停止mysql的服务在对应盘符找到Progra......
  • 吉特日化MES & SQL Server中的数据类型
    一、整数数据类型1、bitbit数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes或No、True或False、On或Off.注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用。每个TINYINT类型的数据占用1个字节的存储空间。bit值保存为1、0或......
  • Java编程小案例
    1.不借助第三者实现两个变量值的交换。packagejava_11_9;importjava.util.Scanner;publicclassNumberSwap{ publicstaticvoidmain(String[]args){ @SuppressWarnings("resource") Scannerscanner=newScanner(System.in); System.out.print("请输入a的值:&q......
  • error DatabaseException(disk I/O error (code 1802)) sql 'PRAGMA user_version' ar
    问题描述errorDatabaseException(diskI/Oerror(code1802))sql'PRAGMAuser_version'args[]duringopen,c问题分析错误消息"DatabaseException(diskI/Oerror(code1802))"表示在尝试打开SQLite数据库时发生了磁盘I/O错误。这可能有几种原因:数据库文件路径......
  • Java方法05:可变参数
     publicclassDemo03{publicstaticvoidmain(String[]args){Demo03demo03=newDemo03();demo03.test(1);//输出1}publicvoidtest(int...i){System.out.println(i[0]);}}publicclassDemo03{publics......
  • mysql链接不上3306报错10060
    1、控制台进入查看防火墙(前提mysql我的端口是3306,现在大部分人已经不用3306了)firewall-cmd--zone=public--list-ports(查看3306端口是否开启,如果没见到3306端口)2、添加3306firewall-cmd--zone=public--add-port=3306/tcp--parmanent3、如上添加成功了,最重要的一点来......