MySQL用户管理
2025-07-22 09:55 点击:0
一、权限表默认创建名为mysql的数据库,存储的是每个用户的权限信息user表存储每个用户的权限用户列Host、User、Password字段用户基本的登录信息,命令修改密码也是改password字段权限列Select_priv、Insert_priv等字段查询、增删改等权限,以及管理权限Y表示该权限应用到所有数据库,N则不能应用到所有,默认为N安全列ssl_type、ssl_cipher、x509_issuer、x509_subject字段ssl用于加密,x509标识用户资源控制列max_questions、max_updates、max_connections、max_user_connections字段max_question字段:每小时最大查询update字段:每小时最大更新conn字段:每小时建立的最大连接nuser_conn字段:单个用户最大连接数db表存储用户操作数据库的权限用户列Host、Db、User字段权限列相比user表多了Create_routine_priv、Alter_routine_priv字段,用于创建、修改存储过程tables_priv表可对单个表进行权限设置字段:Host、Db、UserTable_priv:设置表的权限Timestamp:修改权限时间Grantor:指定用户columns_priv表对单个数据列进行权限设置字段:Host、Db、User、Table_name、Timestamp略Columns_priv:设置列的权限Columns_name:指定哪一列procs_priv表可对存储过程、存储函数进行权限设置字段:Host、Db、User、Grantor、Timestamp略Routine_name:存储过程名Routine_type:存储过程类型,有FUNCTION、PROCEDURE二、用户管理查看mysql> SELECT DISTINCT ConCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;+------------------------------+| query |+------------------------------+| User: 'user1@localhost'@'%'; || User: 'root'@'127.0.0.1'; || User: 'root'@'::1'; || User: 'root'@'localhost'; |+------------------------------+创建用户user1,密码123,主机名localhostmysql> create user 'user1@localhost' identified by '123';INSERT创建用户,必须为后3个字段设置默认值mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)-> values('localhost','user1',PASSWORD('123'),'','','');mysql> flush privileges;--重新从user表加载权限user1远程登录,且拥有所有权限。%表示任意主机可登录mysql> create user 'user1'@'%' identified by '123456';mysql> grant all privileges on *.* to 'user1'@'%';删除mysql> drop user 'user1@localhost';mysql> delete from mysql.user where Host='localhost' and User='user1';修改密码修改user1密码mysql> set password for 'user1@localhost'=password("123456");mysql> update mysql.user -> set password=password("123")-> where User="user1" and host="localhost";mysql> grant select on *.* to 'user1@localhost' identified by '123';修改root密码mysql> set password=password("123456");破解root密码1、关闭服务[root@CentOS ~]# service mysql stop2、不加载权限表启动[root@CentOS ~]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &3、连接数据库[root@CentOS ~]# mysql -u root mysql4、修改密码mysql> update mysql.user -> set password=password("123456")-> where user="root";5、刷新权限表mysql> flush privileges;6、重启服务[root@CentOS ~]# service mysql restart三、权限管理查看查看当前用户mysql> show grants;查看rootmysql> show grants for root@localhost;类型所有权限:ALL PRIVILEGESDDL:CREATE、DROP、ALTER、CREATE TEMPORARY TABLES(创建临时表)、LOCK TABLES(锁定表)、GRANT OPTIONDML:SELECT、INSERT、UPDATE、DELETE、INDEX(索引查询表)、REFERENCE视图:CREATE VIEW、SHOW VIEW存储过程:ALTER ROUTINE、CREATE ROUTINE、EXECUTE用户:CREATE USER服务器:SHOW DATAbase、FILE(加载服务器文件)、PROCESS(服务器管理)、RELOAD(重新加载权限表)、REPLICATION CLIENT、REPLICATION SLAVE、SHUTDOWN、SUPER(超级权限)授予语法:GRANT priv_type [column_list] ON 数据库.表TO user [IDENTIFIED BY [PASSWORD] 'PASSWORD'][ user [IDENTIFIED BY [PASSWORD] 'PASSWORD'] ][WITH with_option [with_option] ]#priv_type:权限类型#column_list:列#identified by:设置密码#with_option:GRANT OPTION:用户还可授权给别的用户MAX_QUERIES_PER_HOUR 10:每小时最多查询10次MAX_UPDATES_PER_HOUR 10:每小时最多更新10次MAX_CONNECTIONS_PER_HOUR 10:每小时最多建立10次连接MAX_USER_ConNECTIONT 10:每个用户每小时最多建立10个连接创建用户user4,有查询、更新所有表权限mysql> grant select,update on *.* -> to 'user4'@'localhost' identified by '123'-> with grant option;授权user3查看mysql数据库的所有表mysql> grant select on mysql.*-> to 'user3@localhost';收回撤销user4所有权限mysql> revoke all on *.*-> from user4@localhost;