mysql连接数据库失败,请确定数据库用户名,密码设置正确

mysql连接数据库失败,请确定数据库用户名,密码设置正确,第1张

现象

一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5731。安装完成后,发现使用任何密码都能登陆 MySQL,修改密码也不管用,重新启动 MySQL 也不能解决。

分析

怀疑使用了 --skip-grant-tables 使用 mysqld --print-defaults 检查,没有发现。

检查登陆用户,都是 root@localhost,说明和 proxy user 没有关系。

使用 mysql --print-defaults 检查客户端是否设置默认的用户和密码,没有发现。

检查数据库中的用户和密码的相关字段:

发现一切都正常,再检查 plugin 字段,发现只有 root 用户是 auth_socket ,其它的用户都是 mysql_native_password,问题可能就出在这儿。

对 auth_socket 验证插件不了解,感觉是这个插件不安全,使用下面的命令修改后,问题解决:

update user set plugin="mysql_native_password" where user='root';

auth_socket 验证插件的使用场景

问题解决后,又仔细研究了一下 auth_socket 这个插件,发现这种验证方式有以下特点:

首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制;

只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了 *** 作系统的安全验证;

*** 作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆MySQL 的 root 用户,必须用 *** 作系统的 root用户登陆。

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用 *** 作系统的 root 用户和 MySQL 的 root 用户。当我们在系统投产后, *** 作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

127001是回送地址,指本地机。

localhost实质上是127001的映射(像),这个映射在 *** 作系统中的配置文件hosts中。

在发布服务时,如果 *** 作系统中限制localhost访问权限,就只能使用IP。

root 是超级用户

oracle数据库里面用户名和数据库不一样

用户名是用户名,除了管理员账户和默认的演示账户scott外,新建一个用户名都需要有管理员权限的账户赋予这个新建账户权限不然啥都不能干的

权限包括查询,新建,授权之类的很多

在数据库中创建对象时,管理员也要对其进行取名

现在谈谈取名的一些技巧

一、表名大小写的控制一般情况下Oracle数据库中的表名或者列名是不区分大小写的

在创建表或者列的时候,即使管理员采用了小写的名字,数据库在将其保存到数据字典之前,会先将其转换为大写,再将他们保存到数据字典中

这也就是为什么我们取名使用小写的子母取名,但是下次查看表的名字的时候,却变成了大写

虽然说Oracle数据库中表与列等数据库对象对于大小写是不敏感的,但是如果数据库管理员确实有需要要让数据库系统对表的名字区分大小写,这也是可以做到的

通常情况下,如果把名字使用双引号括起来,则在Oracle数据字典中就会成为区分大小写的名字

不过笔者这里要提醒各位数据库管理员,虽然说从技术上可以让数据库系统强制取分大小写,但是在实际工作中,包括在内的绝大部分数据库管理员可能都不建议这么做

因为如果有混合的大小写存在,那么在引用这些表或者列名称的时候就需要特别的小心

因为即使用户或者数据库管理员有着过目不忘的本领,也很难准确的记住这些名称的大小写歌时

如果数据库管理员硬要这么做的话,那么很可能是自寻烦恼

在查询时或者其他作业时,要严格区分大小写那是一件很头疼的事情

为此,对于这个大小写的控制,笔者建议数据库管理员要谨慎使用

除非有充分的理由,否则的话,不要轻易使用这个双引号来控制大小写

这个双引号不仅可以用来控制大小写,还有一个比较特殊的作用,就是用引用一些特殊的字符

如在建立表格的时候,需要设置一个名牌号的字段

有些数据库管理员习惯使用num#类似的名称

这不会违反数据库的取名规则

不过在处理的时候会比较麻烦

如利用create语句建立表格的时候,需要给这个字段名称加上双引号

否则的话,执行这条语句的时候,数据库会拒绝执行并向用户提示错误信息

类似的特殊符号还包括一个$美元符号

他们在建立表格的时候,在语句中都需要使用双引号

不过字段建立好之后,在引用这些对象的时候,不需要使用双引号了

同理,虽然Oracle数据库支持这些特殊符号,但是笔者不鼓励数据库管理员在表或者列的取名中采取这些特殊的符号

这有可能给后续的引用带来不必要的麻烦

二、牢记取名空间在Oracle数据库中,跟其他的数据库不同,有一个叫做取名空间的概念

在同一个取名空间中,其名字不可以重复

如表与视图就共享同一个取名空间,为此就要求不仅表的名字不能够相同,而且表的名字与视图的名字也不能够相同

因为他们处于同一个取名空间

类似的,表与函数也是同处于一个表空间,为此他们也不能够同名

不过表与索引、表与约束等等却属于不同的取名空间

也就是说,表的名字可以与约束的名字相同

所以说,数据库管理员在给表等对象取名的时候,一定要了解哪些对象共享同一个名称空间

如果在同一个名称空间内的,即使对象不同(如视图与表),但是他们仍然不能够取相同的名字

为了避免同一个取名空间内重名的现象,笔者建立在取名的时候最好能够根据对象的不同加上对象的固有前缀

如大部分的数据库管理员,在给表取名的时候,一般不会表名前面加上表对象的前缀

但是在定义函数或者视图对象的时候,则会加上前缀

如在函数前面可能会加上FN的前缀,而在视图前面可能会加上vi的前缀

如此的话,在同一个取名空间内也不用担心对象重名的问题

不过无论怎么说,这个取名空间的概念数据库管理员必须牢记

即使在实际的工作中,可以通过前缀等手段轻易的避免这个陷阱,但是在Oracle数据库管理员的认证考试中,这个取名空间也是一个必要的知识点

所以无论从实际的工作还是认证考试的需要,对于这个取名空间管理员都必须要有一个清晰的认识

三、在表、索引、约束、列之间设置密切的联系在创建表的同时,可以给表中的某些列添加索引、约束等等

如在员工信息表中,会设置员工编号唯一性约束

在创建约束的时候,也需要对约束进行取名

虽然说也约束与表、列不属于同一个取名空间,所以在取名的时候基本上没有限制

但是为了后续使用的方便,笔者对约束的取名还有一个小小的建议

简单的说,就是给一个与表直接有关的其他对象具有该表的名字是一种好的做法

如现在有一张用户表名字叫做ad_user(在表名前面一般不加对象名,但是可以根据应用软件的模块设计加上模块的前缀),这种表中有一个字段叫做叫做vlaue,用来存储员工的编号

在表设计的时候,需要给这个字段加一个索引

那么这个索引的名字就可以取名为IDX_USER_VALUE(也就是索引前缀表名字段名的形式)

这么做有什么好处呢一是可以确保相关对象的名字不会重复

因为表的名字不会重复,所以将表的名字与列的名字一起组成某个对象的名字,那么其重复的几率可以说基本上没有

二是方便管理员阅读、理解、维护等等

一看到索引或者约束对象的名字时,就可以看到这个是索引或者约束是用在哪个表的那个字段上的

而且也可以知道这个约束是唯一性约束还是检查约束;索引时主键索引还是外键索引

给数据库管理员一目了然的感觉

这对于后续的维护、升级、调整、引用等等都提供了方便

虽然说Oracle数据库中表与列等数据库对象对于大小写是不敏感的,但是如果数据库管理员确实有需要要让数据库系统对表的名字区分大小写,这也是可以做到的

通常情况下,如果把名字使用双引号括起来,则在Oracle数据字典中就会成为区分大小写的名字

不过笔者这里要提醒各位数据库管理员,虽然说从技术上可以让数据库系统强制取分大小写,但是在实际工作中,包括在内的绝大部分数据库管理员可能都不建议这么做

因为如果有混合的大小写存在,那么在引用这些表或者列名称的时候就需要特别的小心

因为即使用户或者数据库管理员有着过目不忘的本领,也很难准确的记住这些名称的大小写歌时

如果数据库管理员硬要这么做的话,那么很可能是自寻烦恼

在查询时或者其他作业时,要严格区分大小写那是一件很头疼的事情

为此,对于这个大小写的控制,笔者建议数据库管理员要谨慎使用

除非有充分的理由,否则的话,不要轻易使用这个双引号来控制大小写

是。要访问一个MySQL服务器,需要使用一个用户帐号登录其中方可进行。每个MySQL用户帐号都有许多与之相关连的属性,例如用户名、密码以及权限和资源限制。"权限"定义了特定用户能够在MySQL服务器中做什么,而"资源限制"为用户设置了一系列服务器资源的使用许可。创建或更新一个用户涉及到了对用户帐号所有属性的管理。

首先以root身份登录到MySQL服务器中。

$

mysql

-u

root

-p

当验证提示出现的时候,输入MySQL的root帐号的密码。

创建一个MySQL用户

使用如下命令创建一个用户名和密码分别为"myuser"和"mypassword"的用户。

mysql>

CREATE

USER

'myuser'@'localhost'

IDENTIFIED

BY

'mypassword';

一旦用户被创建后,包括加密的密码、权限和资源限制在内的所有帐号细节都会被存储在一个名为user的表中,这个表则存在于mysql这个特殊的数据库里。

运行下列命令,验证帐号是否创建成功

mysql>

SELECT

host,

user,

password

FROM

mysqluser

WHERE

user='myuser';

赋予MySQL用户权限

一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何 *** 作。你得赋予用户必要的权限。以下是一些可用的权限:

ALL:

所有可用的权限

CREATE:

创建库、表和索引

LOCK_TABLES:

锁定表

ALTER:

修改表

DELETE:

删除表

INSERT:

插入表或列

SELECT:

检索表或列的数据

CREATE_VIEW:

创建视图

SHOW_DATABASES:

列出数据库

DROP:

删除库、表和视图

运行以下命令赋予"myuser"用户特定权限。

以上就是关于mysql连接数据库失败,请确定数据库用户名,密码设置正确全部的内容,包括:mysql连接数据库失败,请确定数据库用户名,密码设置正确、mysql账号问题,mysql只有一个账号能登陆,而且用户名是一样的,请看清楚问题补充、oracle数据库里面用户名和数据库是否一样(数据库用户名是什么)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9758053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存