首页 > 数据库 >mysql创建用户及分配操作权限

mysql创建用户及分配操作权限

时间:2023-05-26 11:36:08浏览次数:52  
标签:语句 创建 CREATE mysql 用户 USER MySQL 权限

MySQL 在安装时,会默认创建一个名为 root 的用户,该用户拥有超级权限,可以控制整个 MySQL 服务器,所以如果滥用root账户,对于系统来说是很不安全的。

MySQL 提供了以下 3 种方法创建用户。

  1. 使用 GRANT 语句创建用户
  2. 使用 CREATE USER 语句创建用户
  3. 在 mysql.user 表中添加用户

1. 使用GRANT语句新建用户

虽然 CREATE USER 和 INSERT INTO 语句都可以创建普通用户,但是这两种方式不便授予用户权限。于是 MySQL 提供了 GRANT 语句。

使用 GRANT 语句创建用户的基本语法形式如下:

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']

其中:

  • priv_type 参数表示新用户的权限;
  • database.table 参数表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限;
  • user 参数指定新用户的账号,由用户名和主机名构成;
  • IDENTIFIED BY 关键字用来设置密码;
  • password 参数表示新用户的密码。

例 1

下面使用 GRANT 语句创建名为 test3 的用户,主机名为 localhost,密码为 test3。该用户对所有数据库的所有表都有 SELECT 权限。SQL 语句和执行过程如下:

mysql> GRANT SELECT ON*.* TO 'test3'@localhost IDENTIFIED BY 'test3';
Query OK, 0 rows affected, 1 warning (0.01 sec)

其中,“*.*” 表示所有数据库下的所有表。结果显示创建用户成功,且 test3 用户对所有表都有查询(SELECT)权限。

2. 使用CREATE USER语句创建用户

可以使用 CREATE USER 语句来创建 MySQL 用户,并设置相应的密码。其基本语法格式如下:

CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]

参数说明如下:

1) 用户

指定创建用户账号,格式为 user_name'@'host_name。这里的user_name是用户名,host_name为主机名,即用户连接 MySQL 时所用主机的名字。如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限。

2) IDENTIFIED BY子句
用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。

3) PASSWORD 'password'

PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。'password' 表示用户登录时使用的密码,需要用单引号括起来。

使用 CREATE USER 语句时应注意以下几点:

  • CREATE USER 语句可以不指定初始密码。但是从安全的角度来说,不推荐这种做法。
  • 使用 CREATE USER 语句必须拥有 mysql 数据库的 INSERT 权限或全局 CREATE USER 权限。
  • 使用 CREATE USER 语句创建一个用户后,MySQL 会在 mysql 数据库的 user 表中添加一条新记录。
  • CREATE USER 语句可以同时创建多个用户,多个用户用逗号隔开。


新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。

例 2

使用 CREATE USER 创建一个用户,用户名是 test1,密码是 test1,主机名是 localhost。SQL 语句和执行过程如下。

mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
Query OK, 1 rows affected (0.06 sec)

结果显示,创建 test1 用户成功。

在实际应用中,我们应避免明文指定密码,可以通过 PASSWORD 关键字使用密码的哈希值设置密码。

例 3

在 MySQL 中,可以使用 password() 函数获取密码的哈希值,查看 test1 哈希值的 SQL 语句和执行过程如下:

mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1')                         |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

“*06C0BF5B64ECE2F648B5F048A71903906BA08E5C”就是 test1 的哈希值。下面创建用户 test1,SQL 语句和执行过程如下:

mysql> CREATE USER 'test1'@'localhost'IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';
Query OK, 0 rows affected, 1 warning (0.00 sec)

执行成功后就可以使用密码“test1”登录了。

 

3. 使用 INSERT 语句新建用户

可以使用 INSERT 语句将用户的信息添加到 mysql.user 表中,但必须拥有对 mysql.user 表的 INSERT 权限。通常 INSERT 语句只添加 Host、User 和 authentication_string 这 3 个字段的值。

MySQL 5.7 的 user 表中的密码字段从 Password 变成了 authentication_string,如果你使用的是 MySQL 5.7 之前的版本,将 authentication_string 字段替换成 Password 即可。

使用 INSERT 语句创建用户的代码如下:

INSERT INTO mysql.user(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');

由于 mysql 数据库的 user 表中,ssl_cipher、x509_issuer 和 x509_subject 这 3 个字段没有默认值,所以向 user 表插入新记录时,一定要设置这 3 个字段的值,否则 INSERT 语句将不能执行。

例 4

下面使用 INSERT 语句创建名为 test2 的用户,主机名是 localhost,密码也是 test2。SQL 语句和执行过程如下:

mysql> INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('localhost', 'test2', PASSWORD('test2'), '', '', '');
Query OK, 1 row affected, 1 warning (0.02 sec)

结果显示,新建用户成功。但是这时如果通过该账户登录 MySQL 服务器,不会登录成功,因为 test2 用户还没有生效。

可以使用 FLUSH 命令让用户生效,命令如下:

FLUSH PRIVILEGES;

使用以上命令可以让 MySQL 刷新系统权限相关表。执行 FLUSH 命令需要 RELOAD 权限。

注意:user 表中的 User 和 Host 字段区分大小写,创建用户时要指定正确的用户名称或主机名。

感谢:MySQL创建用户(3种方式)

 

标签:语句,创建,CREATE,mysql,用户,USER,MySQL,权限
From: https://www.cnblogs.com/pengpengdeyuan/p/17434293.html

相关文章

  • python 创建、拷贝、移动、删除文件和文件夹
    python创建、拷贝、移动、删除文件和文件夹1、创建文件夹importosdefcreate_folder(folder:str):folder=os.path.abspath(folder)ifnotos.path.exists(folder):try:os.makedirs(folder)print(f"创建了文件夹:{folder}"......
  • 关于MySQL的JDBC Driver加载过程详解
    在使用JDBC时,都需要提前加载对应数据库的Driver类,MySQL为例:Class.forName("com.mysql.jdbc.Driver")但是不写这句代码也可以让 com.mysql.jdbc.Driver类成功加载,这就涉及到java.sql.DriverManager类了,先看一下代码:publicclassDriverManager{//注册驱动的集合priva......
  • 5分钟搞定Linux安装Mysql5.7(简单快捷,建议收藏)
    本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。服务器版本Mysql版本Centos7.65.7.321.下载Mysql下载地址:https://downloads.mysql.com/archives/community/进入页面后选择你需要的版本进行下载,这里提供了2种格式:tar.gz和tar。如果下载不方便,可以直接从我的网盘里面下......
  • MySQL常用命令
    #安装mysql后查看初始密码cat/var/log/mysqld.log#登录mysqlmysql-u[user]-p[密码]-h[远程主机ip]#本地登录可以简写为mysql-uroot-p#设置密码长度#【8.0】setglobalvalidate_password.length=6;#【5.7】setglobalvalidate_password_length=6;#设置......
  • 疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?
    一、具体问题如图所示,我编写了一个主窗口的程序(如下所示,有兴趣的可以自己复制后运行),发现需要先进入第一个窗口再进入主界面,这不符合逻辑。 代码区域(完整代码):fromtkinterimport*classWinGUI(Tk):def__init__(self):super().__init__()self......
  • MySQL安装
    1、检查是否已经安装了mysql和mariadbrpm-qa|grepmysqlrpm-qa|grepmariadb#如果已经安装,就先卸载:rpm-e--nodeps软件名2、安装mysql按顺序安装:8.0.28-1.el7版本rpm-ivhmysql-community-common-8.0.28-1.el7.aarch64.rpmrpm-ivhmysql-community-cli......
  • MySQL-DQL
    准备测试表,先跟着执行下面的SQL#1.登录MySQL后#2.创建test_database数据库,不存在则创建createdatabaseifnotexiststest_database;#2.1.如果test_database库存在,可以根据自己意愿删除或换个名称dropdatabasetest_database;#删除test_database数据库#3.进入刚创建的库......
  • Mysql数据库遇到的问题及解决办法
    1、1205-Lockwaittimeoutexceeded;tryrestartingtransaction该异常代表数据库中有进程锁住了,会导致后续对数据库的操作都无法执行,需要杀掉锁住的进程 解决办法:1)、SELECT*FROMinformation_schema.INNODB_TRX;执行后找到名为trx_mysql_thread_id的列。2)、杀掉列中的......
  • MySQL学习进阶篇Day1
    1.存储引擎1.1MySQL体系结构  1).连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提......
  • IDEA中Java项目创建lib目录(添加依赖jar包代替maven依赖)
    文章目录1.右键点击项目,创建一个普通的文件夹2.取名为lib3.把项目所需的jar包复制到lib文件夹下4.然后AddasLibrary…构建项目所需的jar包5.点击ok(完成jar包的自动依赖)1.右键点击项目,创建一个普通的文件夹2.取名为lib3.把项目所需的jar包复制到lib文件夹下4.然后Add......