首页
学习
活动
专区
圈层
工具
发布

mysql 添加只读用户

基础概念

MySQL中的只读用户是指具有只读权限的用户,这些用户只能执行查询操作,而不能执行插入、更新或删除等写操作。这种权限设置通常用于保护数据不被意外修改,同时允许用户进行数据分析和报告生成。

相关优势

  1. 数据保护:防止非授权的写操作,确保数据的完整性和安全性。
  2. 性能优化:只读用户通常不会对数据库进行写操作,因此可以减少锁竞争,提高数据库性能。
  3. 权限管理:通过细粒度的权限控制,可以更好地管理不同用户的访问权限。

类型

MySQL中的用户权限可以通过GRANT语句进行设置。对于只读用户,通常会授予以下权限:

  • SELECT:允许用户查询表中的数据。
  • SHOW VIEW:允许用户查看视图的定义。

应用场景

  1. 数据分析:只读用户可以用于数据分析任务,确保分析过程中不会修改原始数据。
  2. 报告生成:只读用户可以用于生成各种报告,确保报告数据的准确性。
  3. 备份和恢复:在进行数据库备份和恢复时,使用只读用户可以避免意外的数据修改。

如何添加只读用户

假设我们要创建一个名为readonly_user的只读用户,并授予其对数据库mydatabase的只读权限,可以使用以下SQL语句:

代码语言:txt
复制
-- 创建用户
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'password';

-- 授予只读权限
GRANT SELECT, SHOW VIEW ON mydatabase.* TO 'readonly_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

可能遇到的问题及解决方法

问题1:用户无法登录

原因:可能是用户名或密码错误,或者用户没有从正确的IP地址登录。

解决方法

  1. 确认用户名和密码是否正确。
  2. 确认用户可以从指定的IP地址登录。如果需要从任何IP地址登录,可以使用%代替localhost
代码语言:txt
复制
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'password';

问题2:用户权限不足

原因:可能是没有正确授予只读权限。

解决方法

  1. 确认已经使用GRANT语句授予了SELECTSHOW VIEW权限。
  2. 使用FLUSH PRIVILEGES刷新权限。
代码语言:txt
复制
GRANT SELECT, SHOW VIEW ON mydatabase.* TO 'readonly_user'@'localhost';
FLUSH PRIVILEGES;

问题3:用户仍然可以执行写操作

原因:可能是用户具有其他数据库或表的写权限。

解决方法

  1. 检查用户的所有权限,确保没有授予写权限。
代码语言:txt
复制
SHOW GRANTS FOR 'readonly_user'@'localhost';
  1. 如果发现有写权限,可以使用REVOKE语句撤销这些权限。
代码语言:txt
复制
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'readonly_user'@'localhost';
GRANT SELECT, SHOW VIEW ON mydatabase.* TO 'readonly_user'@'localhost';
FLUSH PRIVILEGES;

参考链接

通过以上步骤和解决方法,您可以成功创建和管理MySQL中的只读用户。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • MySQL添加用户、删除用户与授权

    1.新建用户   1.1 登录MYSQL:   @>mysql -u root -p   @>密码   1.2 创建用户:   mysql> CREATE USER 'test'@'%' IDENTIFIED...1.3 然后登录一下:   mysql>exit;   @>mysql -u test -p   @>输入密码   mysql>登录成功 2.为用户授权   授权格式:grant 权限 on 数据库.*...首先为用户创建一个数据库(testDB):   mysql>create database testDB;   2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):   ...;//刷新系统权限表   格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";    2.4 如果想指定部分权限给一用户,可以这样来写:   mysql...mysql>flush privileges;   mysql>drop database testDB; //删除用户的数据库 删除账户及权限:>drop user 用户名@'%';

    4.4K10

    MySQL添加用户、删除用户与授权

    1.新建用户   1.1 登录MYSQL:   @>mysql -u root -p   @>密码   1.2 创建用户:   mysql> CREATE USER 'test'@'%' IDENTIFIED...1.3 然后登录一下:   mysql>exit;   @>mysql -u test -p   @>输入密码   mysql>登录成功 2.为用户授权   授权格式:grant 权限 on 数据库.*...首先为用户创建一个数据库(testDB):   mysql>create database testDB;   2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):   ...;//刷新系统权限表   格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";    2.4 如果想指定部分权限给一用户,可以这样来写:   mysql...mysql>flush privileges;    mysql>drop database testDB; //删除用户的数据库 删除账户及权限:>drop user 用户名@'%';

    4.8K90

    MySQL添加用户、删除用户与授权

    1.新建用户   1.1 登录MYSQL:   @>mysql -u root -p   @>密码   1.2 创建用户:   mysql> insert into mysql.user(Host,User...1.3 然后登录一下:   mysql>exit;   @>mysql -u test -p   @>输入密码   mysql>登录成功 2.为用户授权   授权格式:grant 权限 on 数据库.*...首先为用户创建一个数据库(testDB):   mysql>create database testDB;   2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):   ...;//刷新系统权限表   格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";    2.4 如果想指定部分权限给一用户,可以这样来写:   mysql...mysql>flush privileges;    mysql>drop database testDB; //删除用户的数据库 删除账户及权限:>drop user 用户名@'%';

    5.4K20

    Mysql 只读模式设置

    一、常见现象 运维工作中会经常维护MySQL主从服务器,当然Slave我们只是用于读操作。一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证其他同事都按照这个标准操作。...还有一种情况是主从做了对所有数据的同步(包括用户信息),在Master库上面授权的账号也同步到了Slave库上面,当然Master账号中肯定会有select,update,insert,delete权限...为了避免上述问题,我们需要给MySQL的Slave设置为只读模式。...read_only=0 为取消普通账号的只读模式 授权普通MySQL测试账号 mysql> grant select,insert,update,delete on s18.* to 'test'@...global read_only=1 对拥有super权限的账号是不生效的,所以在授权账号的时候尽量避免添加super权限 3-2、锁表 那么我们在做数据迁移的时候不想发生任何数据的修改,包括super

    6.2K40

    centos 7 mysql 添加远程访问用户

    远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库。登陆数据库。 mysql -uroot -p 复制代码 (密码)。...image.png 创建用户用来远程连接 GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDENTIFIED BY 'itoffice' WITH GRANT...OPTION; 复制代码 (第一个itoffice表示用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,第二个itoffice表示密码)。...执行 命令立即生效 flush privileges; 复制代码 查询数据库的用户(看到如下内容表示创建新用户成功了) SELECT DISTINCT CONCAT('User: ''',user...,'''@''',host,''';') AS query FROM mysql.user; 复制代码 使用exit命令退出MySQL 然后打开vim /etc/mysql/my.cnf 将bind-address

    2.8K20

    MySQL新建库 添加用户及权限 MySQL的Grant命令

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。...用户权限 查看当前用户(自己)权限: show grants; 查看其他 MySQL 用户权限: show grants for dba@localhost; 七、撤销已经赋予给 MySQL 用户权限的权限...grant、revoke 用户权限注意事项 1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。...授权表的内容有如下用途: user表 user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。...例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 db表 db表列出数据库,而用户有权限访问它们。

    5.2K10

    MySQL设置数据库为只读

    前言: 默认情况下,我们的 MySQL 实例是可读写的。但有些情况下,我们可以将整个实例设置为只读状态,比如做迁移维护的时候或者将从库设为只读。本篇文章我们来看下 MySQL 设置只读相关知识。...开启后,普通权限用户执行插入、更新、删除等操作时,会提示 --read-only 错误。但具有 super 权限的用户仍可执行变更操作。...mysql> create table tb_a (a int); Query OK, 0 rows affected (0.05 sec) # 使用普通权限用户 mysql> create table...execute this statement # 开启 super_read_only,再次使用超级权限用户来操作数据 mysql> set global super_read_only = 1;...总结: 本篇文章主要介绍了 MySQL 只读状态相关知识,其实除了从库外,其余实例很少设置全局只读,只是遇到某种需求的情况下需要将数据库设为只读状态,写本篇文章的目的也是遇到此类需求时,可以有个参考。

    10.6K10

    freebsd添加用户

    1.2.1(1) 用户添加 pw [-V etcdir] useradd [name|uid] [-C config] [-q] [-n name] [-u uid] [-c comment] [-d...当使用这个参数时,需要使 用-C config [-C config] [-q] 在交互式环境中,这个选项使pw支持输出错误信息 [-N] 在添加和更改操作时输出结果,而不真正改变组和用户信息。...[-G grouplist]指定组列表,组以空格分开,如:-G wheel mysql teczm即把某账号置于这三个组内。 [-L class]在用户创建时指定登录等级。...,会替换掉已经存在的用户 [-m newmembers] 添加新用户到组内,不会替换掉已经存在的用户 示例: 1.新建一个用户bsder使用cshell,家目录为[color]/home/bsder[/.../bin/nologin -d /home/thirder -m -h 0 pw groupadd thirde 将用户添加到组 pw groupmod thirder -m thirde

    2.1K20

    如何给指定数据库创建只读用户?

    在SQL Server 中,为了保护数据库的安全,需要给不同的使用者开通不同的访问用户,那么如何简单的控制用户的权限呢?下面我们就创建一个只读用户,给大家学习使用。...针对每一个数据库,在下方【数据库角色成员身份】中,选择【db_datareader】,同时默认架构中也选择【db_datareader】 6、这样,一个只读用户就建立好了,用此用户登录时,就只能对映射的数据库进行只读访问了...添加只读用户查看存储过程权限 而当我们设置只给某些用户授权只读权限时(即public),这些用户可能需要查看sql的存储过程;因此需要授权给它。...(可以对数据库的数据进行操作) db_owner 可以执行数据库中技术所有动作的用户 db_accessadmin 可以添加,删除用户的用户 db_datareader 可以查看所有数据库中用户表内数据的用户...db_datawrite 可以添加,修改,删除所有数据库用户表内数据的用户 db_ddladmin 可以在数据库中执行ddl操作的用户,DDL(Data Definition Language)数据表的创建以及管理

    4.5K10

    MySQL添加新用户、为用户创建数据库、为新用户分配权限

    登录MySQL [root@VM_0_2_33_CentOS /]#mysql -u root -p 添加新用户 允许本地 IP 访问 localhost, 127.0.0.1 mysql>create...'123456'; 刷新授权 mysql>flush privileges; 为用户创建数据库 mysql>create database test DEFAULT CHARSET utf8 COLLATE...utf8_general_ci; 为新用户分配权限 授予用户通过外网IP对于该数据库的全部权限 mysql>grant all privileges on `testdb`.* to 'test'@'...%' identified by '123456'; 授予用户在本地服务器对该数据库的全部权限 mysql>grant all privileges on `testdb`.* to 'test'@'localhost...' identified by '123456'; 刷新权限 mysql>flush privileges; 退出 root 重新登录 mysql> exit; 用新帐号 test 重新登录,由于使用的是

    4.4K50

    Kubernetes集群添加用户

    ,K8S不存储用户列表——也就是说,添加/编辑/删除用户都是在外部进行,无需与K8S API交互,虽然K8S并不管理用户,但是在K8S接收API请求时,是可以认知到发出请求的用户的,实际上,所有对K8S...这里说的添加用户指的是普通意义上的用户,即存在于集群外的用户,为k8s的使用者。 实际上叫做添加用户也不准确,用户早已存在,这里所做的只是使K8S能够认知此用户,并且控制此用户在集群内的权限。...为用户添加基于角色的访问控制(RBAC) 首先创造一个角色,该角色在acp命名空间下拥有所有权限: kind: Role apiVersion: rbac.authorization.k8s.io/v1...现在我们想要通过kubectl以tom的身份来操作集群,需要将tom的认证信息添加进kubectl的配置,即~/.kube/config中,通过以下命令将用户tom的验证信息添加进kubectl的配置...context配置: kubectl config set-context tom --cluster=kubernetes --namespace=acp --user=tom 添加完成后在~/

    2.1K40
    领券