mysql-8.0.11-winx64 安装配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost——MySQL5.7修改密码
mysql-8.0.11 不再有 my.ini 配置文件了. 通过mysqld --initialize --console 自动生成MYSQL的初始化配置(data文件目录等).
用户名密码: 这一步才是关键!!! 记得加上 --console 参数!
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld --initialize --console
2018-05-24T18:31:49.968235Z 0 [System] [MY-013169] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysq
ld 8.0.11) initializing of server in progress as process 34224
2018-05-24T18:31:56.947634Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qk-nm1!hE/4r
2018-05-24T18:32:00.694848Z 0 [System] [MY-013170] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysq
ld 8.0.11) initializing of server has completed
使用日志中打印的密码: qk-nm1!hE/4r
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qk-nm1!hE/4r
命令行登陆 mysql 终端:
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -uroot -p
Enter password: ************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.11
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
在执行SQL脚本之前,会让你先改密码:
mysql>
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
登陆后执行下面SQL .
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.03 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.02 sec)
mysql> use mysql;
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
33 rows in set (0.00 sec)
mysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | caching_sha2_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
| Create_role_priv | enum('N','Y') | NO | | N | |
| Drop_role_priv | enum('N','Y') | NO | | N | |
| Password_reuse_history | smallint(5) unsigned | YES | | NULL | |
| Password_reuse_time | smallint(5) unsigned | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
49 rows in set (0.00 sec)
这下子我们就可以使用 C:\Program Files\MySQL\MySQL Workbench 8.0 CE
客户端工具直接连mysql数据库了.
Windows上的 建议使用: mysql-installer-community-8.0.11.0.msi 安装包进行安装,不要直接使用 zip解压免安装的版本.
https://dev.mysql.com/downloads/windows/installer/8.0.html
MYSQL:ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost——MySQL 8.0.11 修改密码
mysql-8.0.11-winx64配置
1、首先下载mysql-8.0.11-winx64.zip,并解压到自定义目录。
我的安装目录为F:\software\eclipse J2EE\mysql-8.0.11-winx64\
2、配置文件
配置文件默认是安装目录下的 my.ini 文件(或my-default.ini),没有需要自己创建。
[mysqld]
# 设置3306端口
port=3306 # 设置mysql的安装目录
basedir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\
# 设置mysql数据库的数据的存放目录
datadir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\data
# 允许最大连接数
max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10 # 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集 default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8</pre>
注意,里面的 basedir 是我本地的安装目录,datadir 是我数据库数据文件要存放的位置,各项配置需要根据自己的环境进行配置。
3、初始化数据库
在MySQL安装目录的 bin 目录下执行命令:
mysqld --initialize --console
执行完成后,会打印 root 用户的初始默认密码,在执行输出结果里面有一段:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E 其中root@localhost:
后面的“rI5rvf5x5G,E”就是初始密码(不含首位空格)。在没有更改密码前,需要记住这个密码,后续登录需要用到。
要是你手贱,关快了,或者没记住,那也没事,删掉初始化的 datadir 目录,再执行一遍初始化命令,又会重新生成的。
4、安装服务
在MySQL安装目录的bin目录下按shift+右键执行“在此处打开命令行窗口”
执行mysqld --install和net start mysql安装并启动mysql,如果关闭执行net stop mysql
C:\Program Files\MySQL\bin>mysqld --install
Service successfully installed
C:\Program Files\MySQL\bin>net start mysql
5、登录
在MySQL安装目录的bin目录下按shift+右键执行“在此处打开命令行窗口”
执行mysql -u root -p,输入密码。
6、修改密码
登陆后执行下面命令。
ALTER USER ``'root'``@``'localhost'
IDENTIFIED WITH mysql_native_password BY ``'新密码'``;
7、配置环境变量
虽然MySQL安装成功,但是每次都切换到:\mysql-5.7.17-winx64下来执行相关操作是很麻烦的,配置环境变量后就可方便的操作MySQL了。右键‘计算机’->‘属性’->‘高级系统设置’->‘环境变量’,在系统变量下找到path,点击编辑按钮进入编辑path对话框,在变量值里面前面加上MySQL的解压路径下的bin目录,我的是F:\software\eclipse J2EE\mysql-8.0.11-winx64\bin,注意后面要加上英文分号,确定即配置好环境变量。
参考:http://www.jb51.net/article/139219.htm
https://www.cnblogs.com/cenwei/p/6249856.html
D:\soft\mysql-8.0.11-winx64>tree
文件夹 PATH 列表
卷序列号为 648E-144B
D:.
├─bin
├─data
│ ├─mysql
│ ├─performance_schema
│ └─sys
├─docs
├─include
│ ├─mysql
│ └─openssl
├─lib
│ ├─mecab
│ │ ├─dic
│ │ │ ├─ipadic_euc-jp
│ │ │ ├─ipadic_sjis
│ │ │ └─ipadic_utf-8
│ │ └─etc
│ └─plugin
│ └─debug
└─share
├─bulgarian
├─charsets
├─czech
├─danish
├─dutch
├─english
├─estonian
├─french
├─german
├─greek
├─hungarian
├─italian
├─japanese
├─korean
├─norwegian
├─norwegian-ny
├─polish
├─portuguese
├─romanian
├─russian
├─serbian
├─slovak
├─spanish
├─swedish
└─ukrainian
D:\soft\mysql-8.0.11-winx64\bin>tree /f
文件夹 PATH 列表
卷序列号为 648E-144B
D:.
echo.exe
ibd2sdi.exe
innochecksum.exe
libeay32.dll
libmecab.dll
lz4_decompress.exe
myisamchk.exe
myisamlog.exe
myisampack.exe
myisam_ftdump.exe
mysql.exe
mysqladmin.exe
mysqlbinlog.exe
mysqlcheck.exe
mysqld.exe
mysqld.pdb
mysqldump.exe
mysqldumpslow.pl
mysqld_multi.pl
mysqlimport.exe
mysqlpump.exe
mysqlshow.exe
mysqlslap.exe
mysqlxtest.exe
mysql_config.pl
mysql_config_editor.exe
mysql_secure_installation.exe
mysql_ssl_rsa_setup.exe
mysql_tzinfo_to_sql.exe
mysql_upgrade.exe
my_print_defaults.exe
perror.exe
resolveip.exe
ssleay32.dll
zlib_decompress.exe
重启mysqld服务
在Windows中是这个界面:
WIN+R快捷键打开运行命令,并输入services.msc,按回车Enter即可进入.
输入命令 mysqld install
提示:Service successfully installed.
安装以后启动mysql服务
输入命令 net start mysql
5.7以上的版本可能会无法启动,报错:服务没有报告任何错误。
输入命令 mysqld --initialize
正常情况下无任何提示,自动空格一行,即代表初始化成功。
再重新启动服务就可以开起来,原因是5.7安装文件夹里面缺少data文件夹,initialize以后会自动生成这个文件夹及其中文件。
命令行设置用户名密码
错误提示:
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
或者
# mysql -u root -p password 'newpassword'
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
现在终于找到解决方法了。本来准备重装的,现在不必了。
方法操作很简单,如下:
# /etc/init.d/mysqld stop //停止mysql服务的运行
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & //跳过受权表访问
# mysql -u root mysql //登录mysql
在mysql5.7以下的版本如下:
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='127.0.0.1' or host='localhost';//把空的用户密码都修改成非空的密码就行了。
在mysql5.7版本如下:
update mysql.user set authentication_string=password('newpassword') where user='root' and host='127.0.0.1' or host='localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit # /etc/init.d/mysqld restart //离开并重启mysql
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
附:Mac上解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
首先安装完mysql之后,在系统偏好设置里面会有mysql设置,进去后可点击启动mysql server和关闭。
出现问题的原因是mysql root用户的密码问题,我在网上找了好多种方法,最后这种方法可行,就记录下来了,具体步骤看下面。
解决步骤:
1、首先在设置中关闭mysql服务;
2、然后打开终端,输入:sudo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
再输入:sudo mysql -u root mysql
进入mysql>
执行以下命令:update user set password_expired = "Y" where user="root";
再输入:flush privileges;这一步很重要
然后:quit
3、进行登陆
输入:mysql -uroot -p
会提示你输入密码,这个密码就是安装mysql时出现的
2017-12-13T09:25:15.976324Z 1 [Note] A temporary password is generated for root@localhost: ug&eyEFeo08n
If you lose this password, please consult the section How to Reset the
Root Password in the MySQL reference manual.
这段提示中,密码就是ug&eyEFeo08n,输入即可。
4、登陆成功之后可以修改密码:
set password for root@localhost = password('123456');
之后登陆就用123456这个密码了。
问题描述
今天在MAC上安装完MYSQL后,MYSQL默认给分配了一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误:Access denied for user ‘root’@’localhost’ (using passwor)如图:
解决方案
既然现在没法登录到数据库中,改密码和添加用户等操作也无从谈起。好在MySQL中还提供了一种免去密码校验进入数据库的方法,我们就先使用这种方法登入到数据库中。然后将默认密码替换掉,上面的问题就可以解决掉啦~具体操作如下(如果想要快速解决,可以直接看最下面的快速方案)
一、找到Mysql配置文件
这个操作,在不同平台下对应的不同的操作文件
mac系统中配置文件是mysql安装目录support_file下的my-default文件
需要注意的是:默认该配置文件不具备写权限需要使用chmod命令先为该文件添加写权限才能进行更改
ps:windows系统的配置文件是mysql安装根目录的my.ini文件
二、修改配置文件
打开刚才我们找到的配置文件,然后在里面找到 [mysqld]
这一项,然后在该配置项下添加 skip-grant-tables
这个配置,然后保存文件。
三、重启mysql服务
为了使上一步的配置项生效,我们需要重启MySQL的服务
Mac系统可以在系统偏好中进行重启:
windows系统可以通过:在我的电脑上右键–>服务–>找到mysql服务进行重启
linux系统可以使用:service mysqld restart来重启
四、免密登录MySQL
然后再次进入到终端当中,敲入 mysql -u root -p
命令然后回车,当需要输入密码时,直接按enter键,便可以不用密码登录到数据库当中
五、修改默认的密码
使用 set password for 'username'@'host' = password('newpassword')
命令修改新的密码。
六、检验成果
我们改完默认密码后,再次进入到之前的配置文件中,将我们跳过密码的那个配置行给删除掉,变为系统原先的配置。重启MySQL服务,下次再登录的时候便可以解决掉这个问题了。
快速方案
要是你觉得上面的操作过于麻烦,可以使用下面的快捷方式达到上面的效果,针对mac系统为例:
首先进入到 /usr/local/mysql/support-file
这个目录下,然后按照图片上的步骤进行操作
进入mysql的安全模式后,键入图中圈起来的四行配置(必须逐行输入),输入完成后使用 contrl+z
键结束输入
然后再终端中使用 mysql -u root -p 同样可以实现密码登录,另外此时密码也已经修改为了 pass
,下次的登录即可使用pass这个新密码了。与上面的操作达成的效果是相同的。
忘记密码了怎么办 或者说 想把root的空密码改成有密码?修改密码方法如下:
方法一:
root密码为空时用下面命令修改, 修改成12345:
mysqladmin -u root -p password 12345
不为空时 使用mysqladmin。假如原密码为123456 ,修改为12345 命令如下
mysqladmin -u root -p 123456 password "12345"
注意:更改的密码不能用单引号,可用双引号或不用引号
mysqladmin -u root -p oldpassword password “newpasswd”
执行这个命令后,需要输入root的原密码,这样root的密码将改为newpasswd。同样,把命令里的root改为你的用户名,你就可以改你自己的密码了。
当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空
方法2:
/etc/init.d/mysql stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
/etc/init.d/mysqld restart
mysql -u root -p
Enter password:
mysql>
如果我们想看看还有哪些账户 可以用下面的命令:
在mysql环境中
mysql>select * from mysql.user ;
新增账户:
GRANT ALL PRIVILEGES ON . TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
monty对应帐号 some_pass对应密码
增加一个用户,用户名为sa,密码为123。注意要使用PASSWORD函数,然后还要使用FLUSH
PRIVILEGES来执行确认。
下面的方法都在mysql提示符下使用,且必须有mysql的root权限:
mysql>mysql> INSERT INTO user
-> VALUES('%','monty',PASSWORD('some_pass'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> '','','','',0,0,0,0);
mysql>FLUSH PRIVILEGES
用户权限设置
1、以root(也可用其它有权限的用户)身份登录
2、下面创建一个test用户,密码为test,并且只能对picture数据库进行操作的命令
mysql>GRANT ALL ON picture.* TO test IDENTIFIED BY "test";
GRANT语句的语法看上去像这样:
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
要使用该语句,你需要填写下列部分:
privileges 授予用户的权限,下表列出可用于GRANT语句的权限指定符:
权限指定符 权限允许的操作
Alter 修改表和索引
Create 创建数据库和表
Delete 删除表中已有的记录
Drop 抛弃(删除)数据库和表
INDEX 创建或抛弃索引
Insert 向表中插入新行
REFERENCE 未用
Select 检索表中的记录
Update 修改现存表记录
FILE 读或写服务器上的文件
PROCESS 查看服务器中执行的线程信息或杀死线程
RELOAD 重载授权表或清空日志、主机缓存或表缓存。
SHUTDOWN 关闭服务器
ALL 所有;ALL PRIVILEGES同义词
USAGE 特殊的“无权限”权限
上表显示在第一组的权限指定符适用于数据库、表和列,第二组数管理权限。一般,这些被相对严格地授权,因为它们允许用户影响服务器的操作。第三组权限特殊,ALL意味着“所有权限”,UASGE意味着无权限,即创建用户,但不授予权限。
columns 权限运用的列,它是可选的,并且你只能设置列特定的权限。如果命令有多于一个列,应该用逗号分开它们。
what 权限运用的级别。权限可以是全局的(适用于所有数据库和所有表)、特定数据库(适用于一个数据库中的所有表)或特定表的。可以通过指定一个columns字句是权限是列特定的。
user 权限授予的用户,它由一个用户名和主机名组成。在MySQL中,你不仅指定谁能连接,还有从哪里连接。这允许你让两个同名用户从不同地方连接。 MySQL让你区分他们,并彼此独立地赋予权限。MySQL中的一个用户名就是你连接服务器时指定的用户名,该名字不必与你的Unix登录名或 Windows名联系起来。缺省地,如果你不明确指定一个名字,客户程序将使用你的登录名作为MySQL用户名。这只是一个约定。你可以在授权表中将该名 字改为nobody,然后以nobody连接执行需要超级用户权限的操作。
password 赋予用户的口令,它是可选的。如果你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不安全)。对现有用户,任何你指定的口令将代替老口令。如果你不指定口令,老口令保持不变,当你用IDENTIFIED BY时,口令字符串用改用口令的字面含义,GRANT将为你编码口令,不要你用SET PASSWORD 那样使用password()函数。
WITH GRANT OPTION子句是可选的。如果你包含它,用户可以授予权限通过GRANT语句授权给其它用户。你可以用该子句给与其它用户授权的能力。
注意:用户名、口令、数据库和表名在授权表记录中是大小写敏感的,主机名和列名不是。
一般地,你可以通过询问几个简单的问题来识别GRANT语句的种类:
谁能连接,从那儿连接?
用户应该有什么级别的权限,他们适用于什么?
用户应该允许管理权限吗?
下面就讨论一些例子。
1.1 谁能连接,从那儿连接?
你可以允许一个用户从特定的或一系列主机连接。有一个极端,如果你知道降职从一个主机连接,你可以将权限局限于单个主机:
GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby"
GRANT ALL ON samp_db.* TO fred@res.mars.com IDENTIFIED BY "quartz"
(samp_db.意思是“samp_db数据库的所有表)另一个极端是,你可能有一个经常旅行并需要能从世界各地的主机连接的用户max。在这种情况下,你可以允许他无论从哪里连接:
GRANT ALL ON samp_db. TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符作用,与LIKE模式匹配的含义相同。在上述语句中,它意味着“任何主机”。所以max和max@%等价。这是建立用户最简单的方法,但也是最不安全的。其中,你可以允许一个用户从一个受限的主机集合访问。例如,要允许mary从snake.net域的任何主机连接,用一个%.snake.net主机指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
如果你喜欢,用户标识符的主机部分可以用IP地址而不是一个主机名来给定。你可以指定一个IP地址或一个包含模式字符的地址,而且,从MySQL 3.23,你还可以指定具有指出用于网络号的位数的网络掩码的IP号:
GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby"
GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz"
GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"
第一个例子指出用户能从其连接的特定主机,第二个指定对于C类子网192.168.128的IP模式,而第三条语句中,192.168.128.0/17指定一个17位网络号并匹配具有192.168.128头17位的IP地址。
1.2 用户应该有什么级别的权限和它们应该适用于什么?
你可以授权不同级别的权限,全局权限是最强大的,因为它们适用于任何数据库。要使ethel成为可做任何事情的超级用户,包括能授权给其它用户,发出下列语句:
GRANT ALL ON . TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的.意味着“所有数据库、所有表”。从安全考虑,我们指定ethel只能从本地连接。限制一个超级用户可以连接的主机通常是明智的,因为它限制了试图破解口令的主机。
有些权限(FILE、PROCESS、RELOAD和SHUTDOWN)是管理权限并且只能用"ON ."全局权限指定符授权。如果你愿意,你可以授权这些权限,而不授权数据库权限。例如,下列语句设置一个flush用户,他只能发出flush语句。 这可能在你需要执行诸如清空日志等的管理脚本中会有用:
GRANT RELOAD ON . TO flushl@localhost IDENTIFIED BY "flushpass"
一般地,你想授权管理权限,吝啬点,因为拥有它们的用户可以影响你的服务器的操作。
数据库级权限适用于一个特定数据库中的所有表,它们可通过使用ON db_name.*子句授予:
GRANT ALL ON samp_db TO bill@racer.snake.net INDETIFIED BY "rock" GRANT Select ON samp_db TO ro_user@% INDETIFIED BY "rock"
第一条语句向bill授权samp_db数据库中所有表的权限,第二条创建一个严格限制访问的用户ro_user(只读用户),只能访问samp_db数据
库中的所有表,但只有读取,即用户只能发出Select语句。
你可以列出一系列同时授予的各个权限。例如,如果你想让用户能读取并能修改现有数据库的内容,但不能创建新表或删除表,如下授予这些权限:
GRANT Select,Insert,Delete,Update ON samp_db TO bill@snake.net INDETIFIED BY "rock"
对于更精致的访问控制,你可以在各个表上授权,或甚至在表的每个列上。当你想向用户隐藏一个表的部分时,或你想让一个用户只能修改特定的列时,列特定权限非常有用。如:
GRANT Select ON samp_db.member TO bill@localhost INDETIFIED BY "rock"
GRANT Update (expiration) ON samp_db. member TO bill@localhost
第一条语句授予对整个member表的读权限并设置了一个口令,第二条语句增加了Update权限,当只对expiration列。没必要再指定口令,因
为第一条语句已经指定了。
如果你想对多个列授予权限,指定一个用逗号分开的列表。例如,对assistant用户增加member表的地址字段的Update权限,使用如下语句
,新权限将加到用户已有的权限中:
GRANT Update (street,city,state,zip) ON samp_db TO assistant@localhost
1.3 用户应该被允许管理权限吗?
你可以允许一个数据库的拥有者通过授予数据库上的所有拥有者权限来控制数据库的访问,在授权时,指定WITH GRANT OPTION。例如:如
果你想让alicia能从big.corp.com域的任何主机连接并具有sales数据库中所有表的管理员权限,你可以用如下 GRANT语句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION
在效果上WITH GRANT OPTION子句允许你把访问授权的权利授予另一个用户。要注意,拥有GRANT权限的两个用户可以彼此授权。如果你只给予了第一个用户Select权 限,而另一个用户有GRANT加上Select权限,那么第二个用户可以是第一个用户更“强大”。
2 撤权并删除用户
要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT
OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必须匹配原来GRANT语句的你想撤权的用户的user部分。privileges部分不需匹配,你可以用GRANT语句授权,然后用REVOKE语句只撤销部分权限。
REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。要完全删除一个用户,你必须用一条Delete语句明确从user表中删除用户记录:
%mysql -u root mysql
mysql>Delete FROM user Where User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;
Delete语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!
注意:从 MySQL 5.7 升级到 MySQL 8.0 仅支持通过使用 in-place 方式进行升级,并且不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升级之前对数据进行备份。
下面简要介绍 MySQL 8 中值得关注的新特性和改进。
- 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。
- NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。
隐藏索引:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。
降序索引:MySQL 8.0 为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序。
通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。
UTF-8 编码:从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。
JSON:MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。
可靠性:InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。
高可用性(High Availability):InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。
安全性:对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权。
详细更新说明:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
官方发布说明:https://blogs.oracle.com/mysql/announcing-general-availability-of-mysql-80
MySQL 8 正式版的新增功能:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/
下载地址
Windows (x86, 64-bit), ZIP Archive(mysql-8.0.11-winx64.zip) 183.3M
https://dev.mysql.com/downloads/file/?id=476233
Windows (x86, 64-bit), ZIP Archive(mysql-8.0.11-winx64-debug-test.zip) 230.5M
Debug Binaries & Test Suite
https://dev.mysql.com/downloads/file/?id=476234
其他版本下载地址 >>> https://dev.mysql.com/downloads/mysql/8.0.html