mysql没有写入权限_MySQL的权限系统

一、MySQL权限系统

一)MySQL权限系统介绍

权限系统的作用:授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限

不能明确指定拒绝某个用户的连接

权限控制(授权与回收)的执行语句包括create user,grant,revoke

授权后的权限都会存放在MySQL的内部数据库(MySQL)中,并在数据库启动之后把权限信息复制到内存中

MySQL用户的认证信息不光包括用户名,还要包括发起的主机

SHOW GRANTS FOR ‘joe’@‘office.host.com’;

SHOW GRANTS FOR ‘joe’@‘home.host.com’;

查看mysql实例默认root用户的权限(来自localhost)

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

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

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

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

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

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

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

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

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

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

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

Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限

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

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

Reference权限是在5.7.6版本之后引入,代表是否允许创建外键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权限是创建一个用户之后的默认权限,其本身代表连接登录权限

create user testuser@localhost;

show grants for testuer@localhost;

二)系统权限表

1、权限存储位置

权限存储在mysql库的user,db, tables_priv, columns_priv, andprocs_priv这几个系统表中,待MySQL实例启动后就加载到内存中

User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限

Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库

Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表

Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段

Procs_priv表:存放存储过程和函数级别的权限

2、User权限表结构中的特殊字段

Plugin,password,authentication_string三个字段存放用户认证信息

Password_expired设置成’Y’则表明允许DBA将此用户的密码设置成过期而且过期后要求用户的使用者重置密码(alter user/set password重置密码)

Password_last_changed作为一个时间戳字段代表密码上次修改时间,执行create user/alter user/set password/grant等命令创建用户或修改用户密码时此数值自动更新

Password_lifetime代表从password_last_changed时间开始此密码过期的天数

Account_locked代表此用户被锁住,无法使用

3、Tables_priv和columns_priv权限值

4、procs_priv权限表结构

Routine_type是枚举类型,代表是存储过程还是函数

Timestamp和grantor两个字段暂时没用

5、权限认证中的大小写敏感问题

字段user,password,authencation_string,db,table_name大小写敏感

字段host,column_name,routine_name大小写不敏感

三)MySQL授权用户

1、MySQL的授权用户由两部分组成: 用户名和登录主机名

表达用户的语法为‘user_name’@‘host_name’

单引号不是必须,但如果其中包含特殊字符则是必须的

‘’@‘localhost’代表匿名登录的用户

Host_name可以使主机名或者ipv4/ipv6的地址。 Localhost代表本机, 127.0.0.1代表ipv4的本机地址, ::1代表ipv6的本机地址

Host_name字段允许使用%和_两个匹配字符,比如’%’代表所有主机, ’%.mysql.com’代表来自mysql.com这个域名下的所有主机, ‘192.168.1.%’代表所有来自192.168.1网段的主机

2、MySQL修改权限的生效

执行Grant,revoke,set password,rename user命令修改权限之后, MySQL会自动将修改后的权限信息同步加载到系统内存中

如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括: flush privileges/mysqladmin flush-privileges/mysqladmin reload

如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效

如果是修改database级别的权限,则新权限在客户端执行use database命令后生效

如果是修改global级别的权限,则需要重新创建连接新权限才能生效

--skip-grant-tables可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用

3、权限管理

分配权限

grant all privileges on tableName.* to 'username'@'%';

查看用户授权情况

show grants for 'username'@'%';

show create user'username'@'%'\G

回收权限

revoke select on `sys`.`sys_config` from 'mysql.sys'@localhost;

删除用户

drop user 'username'@'localhost';

drop user 'username'@'%';

4、设置MySQL用户的密码

创建用户时设置密码

create user 'username'@'%' identified by 'password';

修改其他用户密码的方式

###登录服务器修改密码

方法一

ALTER USER'username'@'localhost' IDENTIFIED BY 'mypass';

方法二

SET PASSWORD FOR'username'@'localhost' = PASSWORD('mypass');

方法三

GRANT USAGE ON*.* TO 'username'@'localhost' IDENTIFIED BY 'mypass';

###在命令行修改密码

方法四

mysqladmin-u username -h host_name password "new_password";

修改本身用户密码的方式

方法一

ALTER USER USER() IDENTIFIED BY'mypass';

方法二

SET PASSWORD= PASSWORD('mypass');

四)设置MySQL用户密码过期策略

设置系统参数default_password_lifetime作用于所有的用户账户

default_password_lifetime=180 设置180天过期

default_password_lifetime=0 设置密码不过期

如果为每个用户设置了密码过期策略,则会覆盖上述系统参数

ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密码不过期

ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默认过期策略

手动强制某个用户密码过期

ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;

五)MySQL用户lock

通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态

Create user语句默认的用户是unlock状态

mysql>create user abc2@localhost identified by 'mysql'account lock;

Query OK,0 rows affected (0.01sec)

Alter user语句默认不会修改用户的lock/unlock状态

mysql> alter user 'mysql.sys'@localhost account lock;

Query OK,0 rows affected (0.00sec)

mysql> alter user 'mysql.sys'@localhost account unlock;

Query OK,0 rows affected (0.00sec)

当客户端使用lock状态的用户登录MySQL时,会收到如此报错

Access deniedfor user 'user_name'@'host_name'.

Account is locked.

六)企业应用中的常规MySQL用户

企业生产系统中MySQL用户的创建通常由DBA统一协调创建,而且按需创建

• DBA通常直接使用root用户来管理数据库

• 通常会创建指定业务数据库上的增删改查、临时表、执行存储过程的权限给应用程序来连接数据库

• Create user app_full identified by ‘mysql’;

• Grantselect,update,insert,delete,create temporary tables,execute on esn.* toapp_full@’10.0.0.%’;

• mysql> show grants for app_full@'10.0.0.%';

•+------------------------------------------------------------------------------------------------------------+•| Grants for app_full@10.0.0.% |•+------------------------------------------------------------------------------------------------------------+•| GRANT USAGE ON *.* TO 'app_full'@'10.0.0.%' |•| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, EXECUTE ON `esn`.*TO 'app_full'@'10.0.0.%' |•通常也会创建指定业务数据库上的只读权限给特定应用程序或某些高级别人员来查询数据,防止数据被修改

• Create user app_readonly identified by ‘mysql’;

• Grantselect on esn.* to app_readonly identified by ‘mysq’;

七)企业应用中的MySQL用户密码设定

企业生产系统中MySQL用户的密码设定有严格的规范,通常要有密码复杂度、密码长度等要求

搜索网上的密码生成器,能按要求生成随机密码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

1. 题目 给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value , 使得将数组中所有大于 value 的值变成 value 后,数组的和 最接近 target (最接近表示两者之差的绝对值最小)。 如果有多种使得和最接近…

AJAX 弹出窗消息类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;using System.Text;using System.Web.UI;namespace WebApplication{ /// <summary> /// 消息类 /// /// /// </summary> public class Me…

mysql 创建初始化帐号_MySQL创建SCOTT用户及初始化数据

表结构create table dept(-- 部门编号deptno int unsigned auto_increment primary key,-- 部门名称dname varchar(15) ,-- 部门所在位置loc varchar(50))engine InnoDB;create table emp(-- 雇员编号empno int unsigned auto_increment primary key,-- 雇员姓名ename varchar…

潜在语义分析(Latent Semantic Analysis,LSA)

文章目录1. 单词向量空间、话题向量空间1.1 单词向量空间1.2 话题向量空间2. 潜在语义分析算法2.1 例子3. 非负矩阵分解算法4. TruncatedSVD 潜在语义分析实践一种无监督学习方法&#xff0c;主要用于文本的话题分析其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系…

python分割提取字符串_Python 字符串操作(截取/替换/查找/分割)

python字符串连接先介绍下效率比较低的&#xff0c;有些新手朋友就会犯这个错误&#xff1a;a [a,b,c,d]content for i in a:content content iprint content说下为什么效率会低呢&#xff1f;原因&#xff1a;在循环连接字符串的时候&#xff0c;他每次连接一次&#xff0…

CURL详解[全]

PHP中的CURL函数库&#xff08;Client URL Library Function&#xff09;curl_close — 关闭一个curl会话curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数curl_errno — 返回一个包含当前会话错误信息的数字编号curl_error — 返回一个包含当前会话错误信息的字符串…

基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践

文章目录1. sklearn.decomposition.TruncatedSVD2. sklearn.feature_extraction.text.TfidfVectorizer3. 代码实践4. 参考文献《统计学习方法》潜在语义分析&#xff08;Latent Semantic Analysis&#xff0c;LSA&#xff09; 笔记 1. sklearn.decomposition.TruncatedSVD sk…

一个简单又高效的日志系统

摘要&#xff1a;本文给出一个性能高&#xff0c;使用简单的日志解决方案。本模块实现日志信息的批量写入文件&#xff0c;定时自动flush到文件中&#xff0c;写入文件的日志级别可动态调整&#xff0c;单个日志文件大小可配置&#xff0c;循环对日志文件写入&#xff0c;这样不…

R语言chorolayer_R语言空间可视化:绘制英国脱欧投票地图

添加法国&#xff0c;它位于右下方&#xff0c;因此我们应该看到一点…plot(FR,addTRUE)然后&#xff0c;我们可以检索英国退欧公投数据referendumddply(referendum,.(Region,HASC_code),summarise,Remainsum(Remain),Leavesum(Leave))我们可以发现&#xff0c;脱欧赢得了51.89…

概率潜在语义分析(Probabilistic Latent Semantic Analysis,PLSA)

文章目录1. 概率潜在语义分析模型1.1 基本想法1.2 生成模型1.3 共现模型1.4 模型性质2. 概率潜在语义分析的算法概率潜在语义分析&#xff08;probabilistic latent semantic analysis&#xff0c;PLSA&#xff09;&#xff0c;也称概率潜在语义索引&#xff08;probabilistic …

网站变成灰色调

为方便站点哀悼&#xff0c;特提供css滤镜代码&#xff0c;以表哀悼。以下为全站CSS代码。html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1); } 使用方法&#xff1a;这段代码可以变网页为黑白&#xff0c;将代码加到CSS最顶端就可以实现素装。建议全国…

马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo,MCMC)

文章目录1. 蒙特卡罗法2. 马尔可夫链3. 马尔可夫链蒙特卡罗法4. Metropolis-Hastings 算法5. 吉布斯抽样蒙特卡罗法&#xff08;Monte Carlo method&#xff09;&#xff0c;也称为统计模拟方法&#xff08;statistical simulation method&#xff09;&#xff0c;是通过从概率…

NHibernate 异常及解决办法(长期添加中)

Mapping 错误&#xff1a; 1&#xff09; Could not determine type for:Namespance.Class,AssemblyName, for columns: NHibernate.Mapping.Column(ColumnName) 通常是Mapping中的 type attribute设定错误&#xff0c;在Assembly找不到。如 <property name"PropertyNa…

mysql scope runtime_maven scope provided和runtime的例子

maven常用的scope有compile,provided,runtime,test。complie是默认值&#xff0c;表示在build,test,runtime阶段的classpath下都有依赖关系。test表示只在test阶段有依赖关系&#xff0c;例如junitprovided表示在build,test阶段都有依赖&#xff0c;在runtime时并不输出依赖关系…

[网站seo优化] 史上最全增加外链的方法!

目前在国内网站在百度的权重尤为重要 百度的权重主要取决于 1&#xff0c;收录量2&#xff0c;外链数与质量3&#xff0c;建站时间 可见外链的重要性现在就分享一篇关于外链的文章&#xff0c;希望对大家有用。 一、网站内容1. 写一篇权威的文章(毫无疑问是获得链接的最好方法…

python自动化安装软件_python自动化安装源码软件包

#!/usr/bin/env python# -*- coding:utf:8 -*-#create by 、矿泉水 2015/7/30import sys,commandsif len(sys.argv) 2:SOFTWARE sys.argv[1]commands.getstatusoutput(‘tar zxvf %s &> install.log 2>&1‘%SOFTWARE)SOFTWARE SOFTWARE.split(‘.‘)SOFTWARE.…

蒙特卡罗法近似求解圆周率π

文章目录1. 原理2. 模拟代码1. 原理 给出 x∈[0,1),y∈[0,1)x \in [0,1),y\in[0,1)x∈[0,1),y∈[0,1) 的均匀分布随机点&#xff0c;模拟 ttt 次&#xff0c;落在以 (0,0)(0,0)(0,0) 为圆心&#xff0c;半径 r1r1r1 的圆以内的次数为 ccc当模拟次数足够大时&#xff0c;可以看成…

算法导论2.3-7

Q: 请给出一个运行时间为θ(nlgn)的算法&#xff0c;使之能在一个由n个整数构成的集合S和另一个整数X时&#xff0c;判断出S中是否存在有两个其和等于X的元素。A: 先对S[1 TO N]进行合并排序--------------------------------θ(nlgn) FOR a <- [1 TO N-1]-----------------…

LeetCode 1318. 或运算的最小翻转次数(位运算)

1. 题目 给你三个正整数 a、b 和 c。 你可以对 a 和 b 的二进制表示进行位翻转操作&#xff0c;返回能够使按位或运算 a OR b c 成立的最小翻转次数。 「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。 示例 1&#xff1a; 输入&#x…

redis和mysql数据不一致_高并发下为什么 redis 和数据库不一致?怎么解决?

现在的web架构一般都用redis作为缓存层来减轻数据库的压力&#xff0c;数据在此架构下的读取问题&#xff0c;一般都是先判断redis缓存是否有数据&#xff0c;如果有&#xff0c;直接返回&#xff0c;否则读取数据库的数据&#xff0c;写入redis&#xff0c;返回数据&#xff0…