首页 > 数据库 >mysql用户

mysql用户

时间:2024-07-01 16:53:08浏览次数:15  
标签:用户名 mysql 用户 密码 user 表名

一、数据库用户管理

DCL:数据控制语言,用于设置或者更改数据库用户或角色权限

1.新建用户

create user '用户名'@'源地址'   identified by '密码';

'用户名'
指定将创建的用户名

'来源地址'
指定新创建的用户可在哪些主机上登录
可使用IP地址、网段、主机名的形式
本地用户可用localhost
允许任意主机登录可用通配符%

'密码'
若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;

若使用加密密码,需要先使用select password('密码'); 获取密文,再在语句中添加 password '密文';

若省略“identified by”部分,则用户的密码将为空(不建议使用)
create user 'user1'@'localhost' identified by '123456';

select password('abc123');

create user 'user2'@'localhost' identified by PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

2.查看用户信息

#创建后的用户保存在 mysql 数据库的 user 表里
use mysql;
select user,authentication_string,Host from user;
#authentication_string在mariadb中为password

#查看当前登录用户
select user();

3.重命名用户

rename user 'hx'@'192.168.100.%' to 'hx'@'192.168.%.%'

4.删除用户

drop user 'lisi'@'localhost';

5.修改当前登录用户密码

#修改当前用户的密码
set password = password('abc123'); 
#修改其他用户密码
set password for '用户' = password('abc'123);

在MariaDB 10.4及更高版本中,默认情况下使用了 validate_password 插件来强制密码策略,包括密码长度和复杂性要求。如果想使用简单密码(如只有数字或字母),需要修改相应的全局变量来放宽密码策略要求。

set global validate_password_policy=0;
set global validate_password_length=1;
#修改密码策略

7.忘记 root 密码的解决办法

1)修改 mysql配置文件/etc/my.cnf ,不使用密码直接登录到 mysql

vim /etc/my.cnf

[mysqld]
skip-grant-tables                    #添加,使登录mysql不使用授权表

systemctl restart mysqld

mysql                                #直接登录

2)使用 update 修改 root 密码,刷新数据库

use mysql;

update `user` set `Password`=password('123') where user='root';
FLUSH PRIVILEGES;
quit

mysql -u root -pabc123

#注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。

二、数据库用户授权

1.授予权限

grant语句:专门用来设置数据库用户的访问权限。
当指定的用户名不存在时,grant语句将会创建新的用户;
当指定的用户名存在时, grant 语句用于修改用户信息。

grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [indentified by '密码'];

#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“*”。例如,使用“kgc.*”表示授权操作的对象为 kgc数据库中的所有表。
#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。
#来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.byyb.com”、“192.168.80.%”等。
#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。
#允许用户 zhangsan 在本地查询 hx 数据库中 所有表的数据记录,但禁止查询其他数据库中的表的记录。
grant select ON hx.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123';

#允许用户 lisi 在所有终端远程连接 mysql ,并拥有所有权限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123';

flush privileges;
quit

mysql -u zhangsan -p123;
use hx;
show tables;
select * from tb1;

2.查看权限

show grants for 用户名@来源地址;

#举个例子
show grants for root;

3.撤销权限

revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
#举个例子
#移除用户所有权限
revoke all on *.* from 'hx'@'192.168.100.%';
show grants for'hx'@'192.168.100.%';
#USAGE权限只能用于数据库登陆,不能执行任何操作;
#USAGE权限不能被回收,即 REVOKE 不能删除用户.

flush privileges;

三、命令总结

use 库名;
show tables;      show tables from 库名;
desc [库名.]表名;

create database 库名;
use 库名;
create table [库名.]表名 (字段1 数据类型, 字段2 数据类型, ....[, primary key (字段)]);

drop table [库名.]表名;
drop database 库名;

修改表结构
改表名    alter table 旧表名 rename 新表名
增加字段  alter table 表名 add 新字段 数据类型 [字段属性];
修改字段  alter table 表名 change 旧字段 新字段 数据类型 [字段属性];
删除字段  alter table 表名 drop 字段;

DML:用于管理表数据
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
insert into 表名 values (字段1的值, 字段2的值, ...);                      #要按照表结构的字段顺序设置值

update 表名 set 字段1=值, ... where 条件表达式;

delete from 表名 where 条件表达式;

DQL:用于根据条件查询表数据
select * from 表名 [where 条件表达式];
select 字段1,字段2,... from 表名 [where 条件表达式];

select * from 表名\G      #纵向查看每行记录字段的值

select * from 表名 limit N;      #查看表的前N行记录
select * from 表名 limit N,M;    #查看表的前N行之后的连续M行记录(不包含第N行)


MySQL 的约束特性:
primary key      主键约束    字段的值不能重复,且不能为null,一个自建的表只能有一个主键
unique key       唯一性约束  字段的值不能重复,能为null,一个表可以有多个唯一键
not null         非空约束    字段的值不能为null
default          默认值约束  字段的值如果没有设置则使用默认值自动填充
auto_increment   自增约束    字段的值如果没有设置默认会从1开始每次自动递增1,要求自增字段必须设置主键
foreign key      外键约束    保证相关联的表数据的完整性和一致性

int(N) zerofill  零填充


克隆表
create table 新表 like 旧表;                    #克隆表结构
insert into 新表 (select * from 旧表);          #克隆表数据        可实现表结构和表数据与旧表都一样

create table 新表 (select * from 旧表);         表数据与旧表一样,表结构与旧表可能不一样

清空表
delete from 表名;        一条一条的删除记录,效率较慢;自增字段仍然会按照清空前的最大记录继续自增

truncate table 表名;     直接重建表,清空表效率更快;自增字段会重新从1开始自增

临时表
create temporary table 表名 (....);   临时表可以跟普通的表一样增删改查表中的数据,但是show tables是查看不到的,
                                      临时表只能在当前会话中有效,在其它会话中或者退出当前会话连接,临时都会失效

外键约束
主键表: alter table 表名 add primary key (主键字段);
外键表: alter table 表名 add foreign key (外键字段) references 主键表名 (主键字段);
        插入新数据时,需要先在主键表插入数据再在外键表插入对应数据;删除数据时,需要先在外键表删除数据再在主键表删除对应数据


DCL:用于管理用户与权限
用户管理
select user();        查看当前登录的用户

create user '用户名'@'源地址'   identified by '密码';
                      localhost/IP/网段/主机名/%
                      
rename user '旧用户名'@'源地址' to '新用户名'@'源地址';
                      
drop user '用户名'@'源地址';

select user,host,authentication_string from mysql.user;                      

set password = password('密码');
set password for '用户名'@'源地址' = password('密码');
alter user '用户名'@'源地址' identified by '密码';

找回 root 密码?
1)修改mysql配置文件,在 [mysqld] 下面添加 skip-grant-tables 配置项
2)重启mysqld服务,使用 mysql 密码直接登录 mysql
3)执行 update user set authentication_string=password('密码') where user='root'; 命令修改 root 用户的密码
4)还原mysql配置文件,重启mysqld服务,使用 mysql -u 用户名 -p密码 [-h mysql地址 -P mysql端口] 命令来验证登录

权限管理
grant 权限1,权限2,....  on 库名.表名   to  '用户名'@'源地址'  [identified by '密码'];     #5.7版本支持创建用户和权限授权,8.0版本只能用于权限授权
      all                     *.*

show grants for '用户名'@'源地址';

revoke 权限1,权限2,....  on 库名.表名  from  '用户名'@'源地址';
       all

 

标签:用户名,mysql,用户,密码,user,表名
From: https://www.cnblogs.com/hxqwe/p/18278396

相关文章

  • 深入MySQL锁机制:原理、死锁解决及Java防范技巧
    引言在数据库系统中,锁机制是为了保证数据一致性和完整性的重要手段。MySQL作为广泛使用的关系型数据库管理系统,其锁机制尤为重要。本文将详细介绍MySQL的锁机制原理及实现,并说明在生产环境中如何解决死锁问题,以及在后续开发中如何编写Java代码避免死锁。MySQL锁机制概述MySQ......
  • 大厂面试官问我:在同步binlog的时候主库是一个时间,从库是一个时间,底层是怎么解决的?【后
    本文为【Mysql日志八股文合集(2)】初版,后续还会进行优化更新,欢迎大家关注交流~大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行深挖,来考察你对这个项目亮点的理解以及思考!这个时候,你如果可以回答出面试官的问题,甚至是主动说出自己的思考,那在......
  • MySQL索引怎么优化
    索引优化无非就是两点:把SQL的写法进行优化,对于无法应用索引,或导致出现大数据量检索的语句,改为精准匹配的语句。对于合适的字段上建立索引,确保经常作为查询条件的字段,可以命中索引去检索数据。连接查询时尽量不关联太多表关联太多会导致执行效率变慢多表查询时一定要以大驱......
  • MySQL中的网络命名空间支持
    NetworkNamespaceSupport(网络命名空间支持)提供了在Linux系统中创建和管理多个隔离网络空间的能力。网络命名空间是来自主机系统的网络堆栈的逻辑副本。网络命名空间对于设置容器或虚拟环境非常有用。每个名称空间都有自己的IP地址、网络接口、路由表等等。默认命名空间或全......
  • php 获取微信用户的openId
    //这里的code是通过前端页面获取的//$appid="公众号在微信的appid";//$secret="公众号在微信的appsecret";publicfunctionuserOpenId($appid,$secret,$code){$url="https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&......
  • 升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN
    问题最近碰到一个case,一台主机上,部署了多个实例。之前使用的是MySQL8.0,启动时没有任何问题。但升级到MySQL8.4后,部分实例在启动时出现了以下错误。[Warning] [MY-012582] [InnoDB] io_setup() failed with EAGAIN. Will make 5 attempts before giving up.[W......
  • Batch脚本中的用户交互:CHOICE命令的妙用
    Batch脚本中的用户交互:CHOICE命令的妙用在自动化脚本的世界中,Batch文件以其简洁和高效而著称,但有时我们也需要与用户进行交互以获取输入或提供选择。这就是CHOICE命令大放异彩的地方。本文将深入探讨如何在Batch文件中使用CHOICE命令,通过实际代码示例,展示如何利用这一命令......
  • mysql数据库简介
    一、数据库介绍1.数据库基本概念数据(Data)描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储表将不同的记录组织在一起用来存储具体数据数据库表的集合,是存储数据的仓库以一定的组织方式存储的相互有关的数据集合数据......
  • 知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • 1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源
    一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springboot医院远程诊断系统......