mysql权限(本文系转载)

本文介绍MySQL中用户权限的创建、分配及回收方法,包括创建用户、授予数据库权限、修改权限及删除用户等操作。

create user创建用户

CREATE USER  li@localhost IDENTIFIED BY 'li';

授予用户li数据库person的所有权限,并允许用户li将数据库person的所有权限授予其它用户

GRANT ALL ON PERSON.* TO li@localhost WITH GRANT OPTION;

立即生效,如果授予的权限没有生效执行以下命令,在5.6版本更改即会生效。

FLUSH PRIVILEGES;

GRANT创建用户

如果当前不存在用户,GRANT可以在授予权限的时候创建用户

授予用户数据库person所有表的select,insert权限。

GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc';

同时运行用户abc将person数据库的SELECT,INSERT权限授予给其它用户
GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc' with grant option;
创建用户root密码123456并赋予服务器所有权限,允许IP192.168.1.5的客户端连接。
grant all privileges on *.* to root@'192.168.1.5' identified by '123456'

退出当前用户

exit

查看当前用户的权限

show grants;

查看用户abc的权限

show grants for abc@localhost


REVOKE回收权限

回收用户abc数据库person的insert的权限

REVOKE INSERT ON PERSON.* FROM abc@localhost;

回收权限

回收person数据库abc的所有权限
REVOKE ALL ON PERSON.* FROM abc@localhost;

回收abc的所有数据库所有权限
REVOKE ALL ON *.* FROM abc@localhost;

删除用户

在早期版本需要回收用户的权限之后才能删除用户。删除用户建议使用这种办法,有的人会使用delete from user的办法删除,但是有的用户是针对db的权限那么在mysql.db里面也存在记录,而使用drop user的方式都会被删除。

DROP USER abc@localhost;

 修改用户密码

use mysql;

UPDATE user SET password=PASSWORD('输入新密码') WHERE user='用户名';

FLUSH PRIVILEGES;

权限表字段详解

基于mysql5.6

user表

user表的权限是基于服务器范围的所有权限,比如用户拥有服务器中所有数据库的select权限那么在user表中的Select_priv列为Y,如果用户单单只拥有某个一数据库的select权限那么user表中的Select_priv为N,会在DB表中记录一条信息在DB表中的select_priv为Y。

desc mysql.user;

filed                  type                            null key default

Hostchar(60)    NO   PRI  主机名,localhost表示本地登入,%表示不受限制,也可以单独赋予某个IP的访问权限。  
Userchar(16)NOPRI 登入用户名 
Passwordchar(41)NO  登入用户密码 
Select_privenum('N','Y')NO Nselect权限 
Insert_privenum('N','Y')NO Ninsert权限
Update_privenum('N','Y')NO Nupdate权限 
Delete_privenum('N','Y')NO Ndelete权限 
Create_privenum('N','Y')NO Ncreate权限 
Drop_privenum('N','Y')NO Ndrop权限
Reload_privenum('N','Y')NO N执行刷新和重新加载MySQL各种内部缓存命令的权限 
Shutdown_privenum('N','Y')NO N关闭mysql服务器的权限,不能授予root外的其它用户 
Process_privenum('N','Y')NO N执行show processlist命令的权限 
File_privenum('N','Y')NO N执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 
Grant_privenum('N','Y')NO N是否可以将权限授予其它用户 
References_privenum('N','Y')NO N参照表的权限
Index_privenum('N','Y')NO N创建删除索引的权限 
Alter_privenum('N','Y')NO NALTER权限 
Show_db_privenum('N','Y')NO N查看有哪些数据库的权限
Super_privenum('N','Y')NO NSuper权限,包括kill权限。 
Create_tmp_table_privenum('N','Y')NO N创建创建临时表权限 
Lock_tables_privenum('N','Y')NO N执行lock table权限 
Execute_privenum('N','Y')NO N执行存储过程权限 
Repl_slave_privenum('N','Y')NO N复制相关的权限 
Repl_client_privenum('N','Y')NO N复制相关的权限 
Create_view_privenum('N','Y')NO N创建视图的权限 
Show_view_privenum('N','Y')NO N查看视图的权限 
Create_routine_privenum('N','Y')NO N创建函数、存储过程等权限 
Alter_routine_privenum('N','Y')NO N修改删除函数、存储过程等权限 
Create_user_privenum('N','Y')NO N创建用户的权限 
Event_privenum('N','Y')NO N创建、修改和删除事件的权限 
Trigger_privenum('N','Y')NO N创建、修改和删除触发器的权限 
Create_tablespace_privenum('N','Y')NO N创建表空间的权限 
ssl_typeenum('','ANY','X509','SPECIFIED')NO   
ssl_cipherblobNO   
x509_issuerblobNO   
x509_subjectblobNO   
max_questionsint(11) unsignedNO 0最多问题数 
max_updatesint(11) unsignedNO 0允许的最大更新 
max_connectionsint(11) unsignedNO 0允许的最大连接 
max_user_connectionsint(11) unsignedNO 0 
pluginchar(64)YES   
authentication_stringtextYES   
password_expiredenum('N','Y')NO N 

db表

如果授予一个用户单独某个数据库的权限,就会在db表中记录一条相关信息。

desc mysql.db;

filed                  type          null    key   default

Host                           char(60)                 NO        PRI         主机名,localhost代表只能本地登入,如果是%表示不受限制,也可以单独赋予某个IP的访问权限。
Dbchar(64)NOPRI 数据库名 
Userchar(16)NOPRI 用户名 
Select_privenum('N','Y')NO Nselect权限 
Insert_privenum('N','Y')NO Ninsert权限 
Update_privenum('N','Y')NO Nupdate权限 
Delete_privenum('N','Y')NO Ndelete权限 
Create_privenum('N','Y')NO Ncreate权限 
Drop_privenum('N','Y')NO Ndrop权限 
Grant_privenum('N','Y')NO N是否可以将权限授予其它用户  
References_privenum('N','Y')NO N 
Index_privenum('N','Y')NO N创建删除索引的权限 
Alter_privenum('N','Y')NO NALTER权限 
Create_tmp_table_privenum('N','Y')NO N创建临时表的权限 
Lock_tables_privenum('N','Y')NO N执行lock table权限 
Create_view_privenum('N','Y')NO N创建视图的权限 
Show_view_privenum('N','Y')NO N查看视图的权限 
Create_routine_privenum('N','Y')NO N创建函数、存储过程的权限 
Alter_routine_privenum('N','Y')NO N修改删除函数、存储过程的权限  
Execute_privenum('N','Y')NO N执行存储过程的权限 
Event_privenum('N','Y')NO N创建、修改、删除事件的权限 
Trigger_privenum('N','Y')NO N创建、修改、删除触发器的权限 

创建root用户

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;

创建一个服务器基本的增删改查用户

GRANT UPDATE, DELETE, INSERT, SELECT ON *.* TO 'test'@'%' identified by 'test' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0

创建数据库基本的增删改查用户

GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `new`.* TO 'test'@'%' identified by  'test';

授予数据库名以db开头的数据库的权限

GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `db%`.* TO 'perform'@'%'

创建备份用户

GRANT SELECT,EVENT,SHOW DATABASES,LOCK TABLES ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'backup';

总结

 使用revoke all privileges并不能收回用户的所有权限,对于用户的单个数据库的权限需要单独回收,具体可以查询mysql.db数据库查看用户的每个数据库的具体权限,如果用户权限太多最快的回收权限的方法是删除该用户再重新授予用户新的权限

<think>我们有一个任务:使用Docker命令创建并后台启动MySQL容器,要求挂载主机目录、设置重启策略和root密码。 根据引用内容,我们可以总结出以下关键点: 1. 使用 `docker run` 命令创建并运行容器。 2. 使用 `-d` 参数让容器在后台运行。 3. 使用 `--restart=always` 设置容器自启动(重启策略)。 4. 使用 `-e MYSQL_ROOT_PASSWORD=密码` 设置root用户的密码。 5. 使用 `-v` 参数挂载主机目录到容器内的目录,实现持久化存储和配置文件的挂载。 根据引用[1]和引用[2]中的示例,我们通常需要挂载以下几个目录或文件: - 数据目录:容器内一般是 `/var/lib/mysql`,挂载到主机目录(如:`/home/mysql/data`)以实现数据持久化。 - 配置文件目录:容器内一般是 `/etc/mysql/conf.d`,挂载到主机目录(如:`/home/mysql/conf.d`)。 - 配置文件:容器内一般是 `/etc/mysql/my.cnf`,挂载到主机上的配置文件(如:`/home/mysql/my.cnf`)。 但是,请注意引用[3]和引用[4]中挂载配置文件的方式略有不同,它们将配置文件挂载到容器内的指定路径(如:`/etc/mysql/conf.d/hmy.cnf`)。这是因为MySQL容器会读取`/etc/mysql/conf.d`目录下的配置文件,我们可以将自定义配置文件放在主机目录,然后挂载到容器内的`/etc/mysql/conf.d/`目录下(作为一个文件或者整个目录)。 另外,引用[2]中挂载了日志目录(`/var/log/mysql`),但这不是必须的,可以根据需要选择。 因此,一个典型的命令可能如下(以引用[1]为例): ``` docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \ -v /home/mysql/data:/var/lib/mysql \ -v /home/mysql/conf.d:/etc/mysql/conf.d \ -v /home/mysql/my.cnf:/etc/mysql/my.cnf \ --restart=always mysql:latest ``` 然而,需要注意的是,MySQL官方镜像的文档中提到,如果你挂载一个空的数据目录,容器启动时会进行初始化(创建root用户等)。如果挂载的主机目录已经有数据,则不会重新初始化。 另外,关于配置文件:在MySQL容器中,配置文件可能有多个来源。通常,我们通过挂载整个目录(如`conf.d`)或者单个配置文件(如`my.cnf`)来覆盖默认配置。但是,挂载整个配置文件到容器内的`/etc/mysql/my.cnf`可能会覆盖整个配置文件,而容器内原本的`my.cnf`可能包含一些必要的配置。因此,更推荐的做法是只挂载自定义配置文件到`/etc/mysql/conf.d/`目录下,因为该目录下的所有文件都会被MySQL读取。这样就不会覆盖主配置文件,而是追加配置。 所以,我们可以调整一下,只挂载数据目录和配置目录,并在配置目录中放置我们的配置文件(例如,在主机目录`/home/mysql/conf.d`中放入一个`my-custom.cnf`文件),这样容器启动时会读取该目录下的所有配置文件。 因此,命令可以调整为: ``` docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \ -v /home/mysql/data:/var/lib/mysql \ -v /home/mysql/conf.d:/etc/mysql/conf.d \ --restart=always mysql:latest ``` 这样,我们就不需要挂载整个`my.cnf`文件了,避免了覆盖容器内默认配置的风险。 如果用户需要自定义配置文件,只需要在主机目录`/home/mysql/conf.d`下创建以`.cnf`为后缀的配置文件即可。 另外,引用[2]中使用了`--privileged=true`参数,这是为了赋予容器更高的权限(在需要访问设备等情况下),但对于MySQL容器,通常不需要,可以省略。 根据以上分析,我们给出一个完整的命令示例: 步骤: 1. 创建主机目录(如果不存在): ``` mkdir -p /home/mysql/data mkdir -p /home/mysql/conf.d ``` 2. 如果需要自定义配置,在`/home/mysql/conf.d`目录下创建配置文件,例如`custom.cnf`,并写入配置,例如: ``` [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 3. 运行容器: ``` docker run -d \ --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /home/mysql/data:/var/lib/mysql \ -v /home/mysql/conf.d:/etc/mysql/conf.d \ --restart=always \ mysql:latest ``` 注意: - `-p 3306:3306`:将容器的3306端口映射到主机的3306端口,如果主机端口已被占用,可以修改为其他端口(如`-p 3307:3306`)。 - `mysql:latest`:可以指定具体的版本标签,例如`mysql:5.7`,以使用特定版本的MySQL。 如果用户需要挂载日志目录,可以添加: `-v /home/mysql/logs:/var/log/mysql` 综上所述,我们提供了创建并后台启动带有持久化存储和特定配置的MySQL容器的命令。</think>### 使用Docker创建并启动MySQL容器(带持久化存储) 以下是创建并后台启动MySQL容器的完整命令及分步说明: ```bash docker run -d \ --name mysql-container \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /host/data:/var/lib/mysql \ -v /host/conf.d:/etc/mysql/conf.d \ -v /host/my.cnf:/etc/mysql/my.cnf \ --restart=always \ mysql:latest ``` #### 参数详解: 1. **后台运行 & 容器命名** ```bash -d # 后台运行容器 --name mysql-container # 自定义容器名称 ``` 2. **网络端口映射** ```bash -p 3306:3306 # 主机端口:容器端口 ``` 3. **设置root密码** ```bash -e MYSQL_ROOT_PASSWORD=your_password # 替换your_password ``` 4. **持久化存储挂载** ```bash -v /host/data:/var/lib/mysql # 数据库文件存储 -v /host/conf.d:/etc/mysql/conf.d # 配置文件目录 -v /host/my.cnf:/etc/mysql/my.cnf # 主配置文件 ``` > 将`/host`替换为您的实际主机路径(如`/home/mysql`) 5. **重启策略** ```bash --restart=always # 容器退出时自动重启 ``` 6. **指定镜像版本** ```bash mysql:latest # 可替换为mysql:8.0或mysql:5.7 ``` #### 关键注意事项: 1. **首次启动准备**: ```bash mkdir -p /host/{data,conf.d} # 创建挂载目录 touch /host/my.cnf # 创建配置文件 ``` 若需自定义配置,编辑`my.cnf`文件(示例配置): ```ini [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 2. **权限问题**: - 确保主机目录有写权限:`chmod -R 777 /host/data` - 若使用SELinux,添加`:z`标签:`-v /host/data:/var/lib/mysql:z`[^2] 3. **完整示例**: ```bash docker run -d --name prod-mysql -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=Secur3P@ss \ -v /mnt/dbdata:/var/lib/mysql \ -v /mnt/mysql-conf:/etc/mysql/conf.d \ --restart=unless-stopped \ mysql:8.0 ``` > **重要提示**:首次启动时若挂载空目录,容器会自动初始化数据库文件。若需迁移现有数据库,需先将数据文件放入挂载目录[^1][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值