首页 > 数据库 >mysql授权

mysql授权

时间:2024-07-29 20:08:32浏览次数:11  
标签:10.0 mysql mysqld 授权 3307 权限 root

mysql连接的两种方式

mysql服务端 10.0.0.51:3306 
mysql -uroot -p密码   -h该账户允许登录的网段    -P实例端口

第一种
基于ip:port的 网络链接形式,入口一 ,链接参数 ,-hlocahost    -P3306
端口,窗口提供服务的入口
                windows机器,去链接 mysql服务端
                本质上是tcp的建立
                netstat 查看网络链接情况
                	# 期望是你windows也装了个mysql,然后去登录
                	windows命令行: mysql -uroot -p密码 -hlocalhost
                	# 远程链接
                	# 前提(默认mysql只提供了localhost登录,)
                	
                	# 授权操作,允许[email protected].% 这个网段登录
                	

                	windows命令行:发请求
                		10.0.0.1 这个windows的ip发出登录请求
                		↓
                    	mysql -uroot -plinux3306 -h10.0.0.51 -P3306

第二种
只能再10.0.0.51这个机器上,机器本地,基于进程套接字文件的链接形式
还能用window去用这个方式吗?不能!!!!!
#这个命令只能是在10.0.0.51这个机器去执行
mysql -uroot -plinux3306 -S /linux3306/mysql_3306/mysql.sock 

启动、关闭mysql原理

systemctl start mysqld
systemctl stop  mysqld


如果这俩命令,报错了,如何排查
以及你得搞懂mysql启动的进程命令,背后的脚本加载逻辑,执行顺序

管理3306实例的脚本逻辑顺序

1. 脚本放在了 /etc/init.d/mysqld

2. 可以用多种方式使用该脚本

1.给脚本添加执行权限
/etc/init.d/mysqld  start

2. 该方式等于
service mysqld start 

3.centos7上建议写法

systemctl  start mysqld


4. service和systemctl命令都是去读取  /etc/init.d/目录下的脚本mysqld脚本文件

5.再centos7下的加载顺序

/etc/init.d/mysqld
↓
systemctl 去调用
↓
service  转化为systemctl  

mysqld_safe和mysqld区别

mysqld_safe作用

1. mysql官方启动脚本,是以执行mysqld_safe为入口,其实mysqld_safe也是个shell脚本,调用了myqsld命令启动服务

2.mysqld_safe脚本设置运行环境,如以守护进程运行
3.mysqld_safe检测mysqld运行状态
4.mysqld_safe检测mysqld进程运行信息,写入 mysql实例目录下的hostname.err文件
5.以及mysqld_safe会读取my.cnf配置文件的[mysqld],[mysqld_safe]等配置

mysqld作用

mysqld是mysql的核心程序,用于管理mysql的数据库文件,以及用户执行的SQL请求
mysqld读取my.cnf中 [mysqld]配置



关闭mysql

脚本关闭,什么脚本起的,就用什么脚本关

systemctl stop mysqld
service mysqld stop
/etc/init.d/mysqld stop

命令关闭

mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)

特殊情况下,不建议用这个操作

kill pid
pkill mysqld
killall mysqld

kill -9 pid # 极端情况下,才能用这个
# 除非进程卡死,无任何解决办法,再去 kill -9 pid 数据丢失,数据写入,事务提交,确认数据写入到磁盘,写入到日志

远程连接管理学习grant语句

本地连接

# 授权语句,创建一个用户,只允许本地连接
# 也能实现创建一个用户的作用
grant 权限  on 库.表 to 用户名@'允许登录的网段' identified by '远程登录的用户密码';
# 注意,写localhost 和127.0.0.1是不一样的

# 创建wenjie用户,只允许再机器本地登录mysql 3307实例,给与最大权限,可以增删改查所有库表
# 先登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock 

mysql> 
mysql> grant all privileges   on *.* to wenjie@'127.0.0.1'  identified by 'wenjie666';

查看mysql的用户表

1. 登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock 


2. 先进入mysql库,查看库下的所有表


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> use mysql;

# 查看当前再哪个库

mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)


# 查看当前库下有哪些表,2个语法

# 完整的
mysql> show tables from mysql;

# 简写
mysql> show tables;

授权,允许访问的网段

# 只允许wenjie用户在 10.0.0.0~255 网段登录,有最大的权限

# 授权语句只能用root去操作

# % 百分号表示一个任意匹配的意思
grant all privileges on *.* to wenjie@'10.0.0.%' identified by 'wenjie666';

#查询mysql的用户表的信息,当前mysql实例,有哪些用户信息

select * from mysql.user; # 默认查询所有的字段

select user,host from mysql.user;




# 再创建一个用户 songlin01 只允许再内网172网段登录mysql

grant all privileges on *.* to songlin01@'172.16.1.%' identified by 'songlin666';


mysql> 
mysql> select user,host  from mysql.user;
+---------------+------------+
| user          | host       |
+---------------+------------+
| wenjie        | 10.0.0.%   |
| wenjie        | 127.0.0.1  |
| songlin01     | 172.16.1.% |
| mysql.session | localhost  |
| mysql.sys     | localhost  |
| root          | localhost  |
| wenjie        | localhost  |
+---------------+------------+
7 rows in set (0.00 sec)

远程登录白名单语法

mysql -uroot -pwww.yuchaoit.cn -S /tmp/mysql.sock -e "grant all on . to bob01@'10.0.0.7' identified by 'yuchao666';"

mysql 用户授权语法

用户名@'网段白名单'


语法

yuchao@'localhost'  yuchao可以在本地登录(ip:3306),以及socket

yuchao@'10.0.0.10'  yuchao只能在10.0.0.10这个客户端登录
yuchao@'10.0.0.%'   yuchao只能在10.0.0.xx/24网段登录
yuchao@'10.0.0.5%'  yuchao只能在10.0.0.50~59 登录

yuchao@'%'  yuchao可以在任意地址登录该mysql服务端
yuchao@'db-51'   基于主机名的登录限制

用户管理

查看mysql用户列表

[root@db-51 ~]#mysql -uroot -pwww.yuchaoit.cn -e 'select User,Host,authentication_string from mysql.user;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-----------+-------------------------------------------+
| User          | Host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *E4270FA99E3E2D95856323D2C35CB2E4728028A1 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| yuchao01      | localhost | *518455521988924B96DD6FFF6F10BC59693382B0 |
| yuchao02      | 10.0.0.%  | *518455521988924B96DD6FFF6F10BC59693382B0 |
| bob01         | 10.0.0.7  | *518455521988924B96DD6FFF6F10BC59693382B0 |
+---------------+-----------+-------------------------------------------+
[root@db-51 ~]#

创建用户

create user chaoge01@'localhost'; # 创建用户无密码

select user,host,authentication_string from mysql.user; # 查询

创建且设置密码

create user chaoge02@'localhost' identified by '123';

修改用户密码,root去修改

alter user chaoge01@'localhost' identified by '123';
alter user chaoge01@'localhost' identified by 'yuchaoge666';

普通用户改自己密码

# 注意修改自己的密码,要进行加密处理

# 需求,让wenjie修改自己的密码为 laoliu666

set password=password('chaoge666');

删除用户

mysql> drop user chaoge02@'localhost';
Query OK, 0 rows affected (0.00 sec)

授权管理

权限的作用

限制mysql的用户,可以执行哪些SQL语句。

grant授权命令

查看所有文档
mysql> help grant;

语法

grant all privileges on . to 'yuchaoit'@'10.0.0.%' identifiedy by 'chaoge666';

授权实践

root默认不允许远程登录,给与权限,允许远程登录

grant all privileges on *.* to 'root'@'%' identified by 'chaoge666';

给一个普通开发者的账户权限,只能增删改查基本操作,且限定某个数据库,且只允许在内网环境连接。

grant select,update,delete,insert on crm.* to dev01@'10.0.0.%' identified by 'dev666';

查看具体用户的权限

mysql> show grants for chaoge01@'localhost';
+----------------------------------------------+
| Grants for chaoge01@localhost                |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'chaoge01'@'localhost' |
+----------------------------------------------+
1 row in set (0.00 sec)

回收权限

# 移除删除权限
revoke delete on *.* from dev01@'10.0.0.%';

# 移除所有权限,针对crm这个库
revoke all on crm.* from dev01@'10.0.0.%';

再次查询
show grants for dev01@'10.0.0.%';

只有账户、无任意权限

该账户只能登录

mysql> show grants for dev01@'10.0.0.%';
+------------------------------------------+
| Grants for [email protected].%                |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'dev01'@'10.0.0.%' |
+------------------------------------------+
1 row in set (0.00 sec)

privileges权限表

All/All Privileges权限代表全局或者全数据库对象级别的所有权限

Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限

Alter routine权限代表允许修改或者删除存储过程、函数的权限

Create权限代表允许创建新的数据库和表的权限

Create routine权限代表允许创建存储过程、函数的权限

Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限

Create temporary tables权限代表允许创建临时表的权限

Create user权限代表允许创建、修改、删除、重命名user的权限

Create view权限代表允许创建视图的权限

Delete权限代表允许删除行数据的权限

Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令

Event权限代表允许查询,创建,修改,删除MySQL事件

Execute权限代表允许执行存储过程和函数的权限

File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数

Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限

Index权限代表是否允许创建和删除索引

Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限

Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写

Process权限代表允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令

Reference权限是在5.7.6版本之后引入,代表是否允许创建外键

Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表

Replication client权限代表允许执行show master status,show slave status,show binary logs命令

Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系

Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的

Show databases权限代表通过执行show databases命令查看所有的数据库名

Show view权限代表通过执行show create view命令查看视图创建的语句

Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown

Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令

Trigger权限代表允许创建,删除,执行,显示触发器的权限

Update权限代表允许修改表中的数据的权限

Usage权限是创建一个用户之后的默认权限,其本身代表连接登录权限
# by www.yuchaoit.cn

修改root密码

Mysqladmin改密码

myqsladmin  具体链接哪一个数据库实例   修改它的密码

# 修改3307的root的密码
mysqladmin -uroot -plinux3307  -S /linux0224/mysql_3307/mysql.sock  password new3307 

# 客户端命令登录3307,查看信息
mysql -uroot -pnew3307 -S /linux0224/mysql_3307/mysql.sock -e "status;"

set语句修改

- root去修改他人密码
  - `set password for  wenjie01@'10.0.0.%'=PASSWORD('wj666')`
- 用户直接用set命令改自己的密码
  - 普通用户登录后
  - `set password='新密码'`
  - `set password=PASSWORD('新密码')`

update语句修改

mysql> update mysql.user set authentication_string=password("www.yuchaoit.cn") where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

刷新后,权限表会更新

忘记root密码咋办

# 1. 修改my.cnf
skip-grant-table
重启密码了没问题,也修改完毕了


# 案例,如忘记了 3307的密码


vim /etc/mysql_3307.cnf  
#这个功能是给 [mysqld]服务端
[root@tech-db-51 ~]#cat /etc/mysql_3307.cnf 
[mysqld]
skip-grant-tables
port=3307
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3307/
socket=/linux0224/mysql_3307/mysql.sock
log_error=/linux0224/mysql_3307/mysql.log


# 重启mysqld,读取该配置,跳过授权表

[root@tech-db-51 ~]#vim /etc/mysql_3307.cnf

[root@tech-db-51 ~]#bash /linux0224/3307.sh start
Starting MySQL...
[root@tech-db-51 ~]#ps -ef|grep 3307
root       2159      1  0 19:42 pts/0    00:00:00 /bin/sh /opt/mysql/bin//mysqld_safe --defaults-file=/etc/mysql_3307.cnf --pid-file=/linux0224/mysql_3307/mysqld_3307.pid
mysql      2322   2159  3 19:42 pts/0    00:00:00 /opt/mysql/bin/mysqld --defaults-file=/etc/mysql_3307.cnf --basedir=/opt/mysql/ --datadir=/linux0224/mysql_3307 --plugin-dir=/opt/mysql//lib/plugin --user=mysql --log-error=/linux0224/mysql_3307/mysql.log --pid-file=/linux0224/mysql_3307/mysqld_3307.pid --socket=/linux0224/mysql_3307/mysql.sock --port=3307
root       2352   1353  0 19:42 pts/0    00:00:00 grep --color=auto 3307




# 登录试试,注意链接哪个实例

[root@tech-db-51 ~]#mysql -S /linux0224/mysql_3307/mysql.sock

mysql> set password='linux3307';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

想基于set修改密码,基于跳过授权表的登录状态,不允许走set修改

暴力点update改密码表数据


update mysql.user  SET authentication_string=PASSWORD('linux3307')  where  user='root' and host='localhost'  ;



至此,密码修改完毕
刷新权限数据表;

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)




# 2. 务必要改回来

修改配置文件,去掉免密参数,重启,试试新密码
[root@tech-db-51 ~]#cat  /etc/mysql_3307.cnf 
[mysqld]
port=3307
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3307/
socket=/linux0224/mysql_3307/mysql.sock
log_error=/linux0224/mysql_3307/mysql.log



重启
[root@tech-db-51 ~]#bash /linux0224/3307.sh restart
Restarting MySQL...
Stoping MySQL...
Starting MySQL...


登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock -e "status"
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper

Connection id:		3
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.7.28 MySQL Community Server (GPL)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	latin1
Db     characterset:	latin1
Client characterset:	utf8
Conn.  characterset:	utf8
UNIX socket:		/linux0224/mysql_3307/mysql.sock
Uptime:			46 sec

Threads: 1  Questions: 7  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries per second avg: 0.152

标签:10.0,mysql,mysqld,授权,3307,权限,root
From: https://www.cnblogs.com/btcm409181423/p/18328933

相关文章

  • Python操作MySQL数据库的5种方式
    不管你是做数据分析,还是网络爬虫,Web开发、亦或是机器学习,你都离不开要和数据库打交道,而MySQL又是最流行的一种数据库,这篇文章介绍Python操作MySQL的5种方式,你可以在实际开发过程中根据实际情况合理选择。1、MySQLdbMySQLdb又叫MySQL-python,是Python连接MySQL最流行......
  • PHP获取MySQL错误信息的方法是什么
    在PHP中,当你使用MySQLi或PDO扩展与MySQL数据库进行交互时,你可能会遇到错误或异常。以下是如何从MySQLi和PDO获取错误信息的方法:使用MySQLi获取错误信息:如果你使用的是MySQLi扩展,你可以通过mysqli_error()函数或mysqli对象的error属性来获取最近调用的错误描述。使用mysqli_erro......
  • MySQL忘记密码
    查看MySQL有没有启动。如果MySQL已经启动了,那么停掉MySQL:servicemysqldstop设置无密码启动在下面写上:skip-grant-tables启动MySQLservicemysqldstart无密码开启MySQL可以在里面设置密码。......
  • MySQL 学习笔记 进阶(SQL优化,视图,存储过程 上)
    SQL优化 SQL优化-插入数据insert优化·批量插入insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry');·手动提交事务starttransaction;insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry......
  • java  mysql  数据库连接池,使用C3P0 的案例
    问:java mysql 数据库连接池,使用C3P0的案例答:当然有C3P0作为JavaMySQL数据库连接池的案例。C3P0是一个开源的JDBC连接池库,它具有连接池管理、连接池监控等功能,可以提高数据库连接的效率和性能。以下是使用C3P0连接MySQL数据库的一个案例:1.添加C3P0依赖首先,你需要在你......
  • MySQL大事务堵塞写入
    这是2022年发生的一起线上事故,现在有空记录一下。线上使用的是5.6版本的,大部分业务的逻辑都是先delete全表,再insert,所以大事务一直是个问题,但是未发生过阻塞业务的情况。现象MySQL服务器的负载在一分钟内急剧上升,后又迅速恢复正常。查看binlog文件发现当时有个3G的binlog文件......
  • 记录一次mysql数据库修复过程
    1.场景最近在使用小皮面板进行靶场搭建的时候,发现数据库一直无法启动,而在虚拟机里是可以启动了,这就很奇怪了。意识到我的本地已经安装了mysql,可能产生了冲突,但是当我兴冲冲启动本地mysql的时候服务却无法启动了。尝试启动了几次mysql重新删除添加服务后发现问题没有得到解决。......
  • MySQL文件my.ini配置
    [mysql]#设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=E:\\mysql-5.7.38-winx64#设置mysql数据库的数据的存放目录datadir=E:\\mysql-5.7.38-winx64\\data#允许最大连接数max_connectio......
  • 树莓派4b的Mysql数据库操作
    卸载树莓派中的MySQL。停止MySQL服务:sudosystemctlstopmysql卸载MySQL服务器和客户端:sudoapt-getremove--purgemysql-servermysql-clientmysql-common删除MySQL数据库和配置文件:sudorm-rf/etc/mysql/var/lib/mysql自动删除未使用的依赖:s......
  • Mysql表结构同步存储过程(适用于模版表)
    Mysql表结构同步流水模版表新增字段需要同步到所有区域年份的流水表CREATEDEFINER=`root`@`%`PROCEDURE`SyncTableStructure`(INsourceTableVARCHAR(255),INtargetTableVARCHAR(255))BEGINDECLAREdoneINTDEFAULT0;DECLAREcolumnNameVARCHAR(255);......