2023年7月31日发(作者:)
Sybase数据库修复及"sa"用户口令的恢复
SYBASE数据库管理系统中数据库损坏后,重新建立数据库的时间比较长,这将给应用(特别是对时间要求特别严格的应用,如金融、证券等)造成很大的损失。而如果在应用中遗忘超级用户sa口令,更会给系统管理带来极大的不便,甚至很多操作都无法进行。本文介绍一种简便的修复SYBASE数据库及恢复sa口令的方法。以下假定server能正常启动,server名为SYBASE,数据库名为demodb。
一、修复SYBASE数据库 分为两种情况:
1.数据库所用的设备正常,而库demodb的状态为suspect。
(1)以sa注册
isql -u sa -P
1>
(2)修改server属性,置系统表为允许修改该状态。
1>sp_configure "allow updates",1
2>go
3>recofigure with override
4>go
(3)修改数据库的状态,置数据库状态为server启动时不检测。
1>update abases set status = -32768
2>where name = "demodb"
3>go
(4)重启server。
(5)修改数据库的状态,置数据库状态为正常。 1>update abases set status = 0
2>where name ="demodb"
3>go
(6)修改server属性,置系统表为不允许修改状态。
1>sp_configure "allowupdates",0
2>go
3>reconfigure with override
4>go
(7)再次重启server。
至此,如果数据库能够正常,则恢复完毕。
以上步骤中,也可以用单用户模式启动server,命令为startserver -m,而不必修改server的"allow updates"属性。SYBASE 11及以上版本的server只需重启,不需要执行reconfigure
with override。如果上述方法仍不能恢复数据库,则只能使用dbcc命令删除该数据库,然后重新建立。
2.数据库所占用的设备不正常,库的状态为suspect 使用sp_helpdb和sp_helpdevice命令查出数据库设备的逻辑名、物理名、设备号、大小等信息。如果上述命令无法查出数据库设备的信息,可使用select * from bases和select * from ices。然后用disk reinit重建设备。最后,按照1的步骤恢复数据库。
上述第一种情况数据库损坏程度较轻,对数据库内容检查后即可使用。而在第二种情况下,如果数据库的日志建立在不同的设备上,只是数据库的日志设备损坏,数据库的损坏程度会较轻,只是有些交易无法恢复;如果数据库的设备损坏,整个数据库的内容会全部丢失,其中表、表的内容、存储过程都需要重建。所以建议数据库和数据库的日志建立在不同的设备上。
系统错误日志errorlog文件存有SYBASE数据库系统的错误信息,系统出错时应先检查此文件,据此判断错误原因,找出解决办法,以免误操作。
二、 恢复sa口令 编辑RUN_SYBASE,在dataserver启动行尾加入参数 -psa,然后存盘退出,执行startserver -f RUN_SYBASE重启server,系统会给超级用户sa一个随机的密码,以此密码注册进入server,然后使用sp_password命令修改密码即可。
Window下修改DB2密码后不能启动的解决方法
前天,我在命令方式下,修改了db2admin的密码:
db2 connect to sample user using
db2admin
当电脑启动的时候,提示有个服务不能正常启动,而且会发出几声嘟嘟的声音。
发现DB2服务不能启动。
到计算机管理-”服务“里一看,原来是原先我把有个“DB2 控制器”给服务改成手工了,
启动下,出现不能启动服务,想想可能是密码不对。
到本地用户和组里把db2admin密码改了,就可以启动了。
原因:我在DB2这端改了密码,在控制器上也得改密码,不然profile文件就会出错。
DB2 控制器:收集与 DB2 数据库相连接的应用程序的统计信息。
"D:"
补充:
还有其他关于DB2的服务都得重新设置用户名和密码,在服务属性的”登录“中。
在DB2启动的过程中,又跳出:不能读写某块内存的信息。
在百度查了一下,做如下设置即可。
d:ibmsqllibbin> start sample db2admin 密码
SQL Server数据库超级管理员账号防护知识
提到sa弱口令,我们首先就会想到,许多数据库都有1个类似的超级管理员账号,比如:Oracle是"system"和"sys",Sybase也是"sa",MySQL里有"root"(不是UNIX系统账号的那个root)。如果没有设置相对应的密码或者你设的密码强度太低过于简单,那么入侵者就能直接登陆并攻击数据库服务器,他们甚至可以获得你操作系统的最高级别的权限。说到这里,有的人也许不相信,曾经有人和我说:"数据库被攻破最多你的那些表啊什么的被人家拿走,对方怎么可能获得操作系统最高权限呢?"其实,我并不是在危言耸听,下面我就假设某台SQL Server
2000的数据库的SA密码被破解为例,来看看黑客在取得了数据库权限后如何进1步把自己变成系统的管理员。
目前,网络上有不少此类工具,可以方便那些不熟悉SQL的人用,其实完全不用去下载那种工具,只要用微软自己的SQL Server里自带客户端程序连上去就马上可以轻松的把自己变成整个操作系统的超级管理员了。具体的过程,我就为大家讲解1遍,这里先假设黑客已经通过其他工具暴力破解了你设置的强度教低的sa帐号的弱口令,或者你根本就没有为sa账号设置口令。首先黑客打开SQL Server查询分析器,以sa身份和他刚暴力破解的密码登陆进你的SQL
Server数据库,然后他执行以下语句:
xp_cmdshell "net user zxc nopassword /add" go xp_cmdshell "net localgroup /add
administrators zxc" go
这时候,你如果打开你的计算机管理-----本地用户和组-----用户,这时候你会发现里面已经多出了1个叫zxc的新账号,查看一下此帐号的属性,你更会发现他竟然隶属于administrators组。
说到这里大家肯定都明白了,对,黑客通过调用SQL Server的系统数据库master里的xp_cmdshell这个扩展存储过程轻松的将他自己变成了你服务器上的超级管理员,那么以后他还有什么事情会干不了呢。
因此,如果大家在平时不需要调用此存储过程的话,可以考虑将它删除,当然不管你平时是不是要调用此存储过程,你都应该为你的sa账号设置1个十分健壮的密码,这是最根本、最重要的,你可以打开SQL Server的企业管理器,然后选择安全性-----登陆,右击sa账号,选择属性,然后在属性对话框里修改您的sa帐号所对应的密码,这里我建议你要尽可能的设置的复杂些,可以用英文字母结合数字结合特殊符号等,这样就可以防止黑客对此帐号的暴力破解,当然最好是在安装您的SQL Server的时候就已经完成此项工作,以免日后因人为遗忘等原因带来安全隐患。
讲解几种破解MySQL数据库root密码的方法
方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。
方法二
使用mysqladmin,这是前面声明的一个特例。
mysqladmin -u root -p password mypasswd
输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。
把命令里的root改为你的用户名,你就可以改你自己的密码了。
当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。
下面的方法都在mysql提示符下使用,且必须有mysql的root权限:
方法三
mysql> Insert INTO (Host,User,Password)
VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));
mysql> FLUSH PRIVILEGES
确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。
在《mysql中文参考手册》里有这个例子:
注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。 方法四
和方法三一样,只是使用了REPLACE语句
mysql> REPLACE INTO (Host,User,Password)
VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));
mysql> FLUSH PRIVILEGES
方法五
使用SET PASSWORD语句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD(’biscuit’);
拟也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES。
方法六
使用GRANT ... IDENTIFIED BY语句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY ’biscuit’;
这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。
注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。
MySQL 忘记口令的解决办法
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password("new_pass") where user="root"; >flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL 。
mysql密码清空
Windows:
1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysqlbin
4.跳过权限检查启动MySQL,
c:mysqlbin>mysqld-nt --skip-grant-tables
5.重新打开一个窗口,进入c:mysqlbin目录,设置root的新密码
c:mysqlbin>mysqladmin -u root flush-privileges password "newpassword"
c:mysqlbin>mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以用新的密码链接到Mysql了。
Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
shell>mysqld_safe --skip-grant-tables & 4.为root@localhost设置新密码
shell>mysqladmin -u root flush-privileges password "newpassword"
5.重启MySQL Server
mysql修改密码
mysql修改,可在mysql命令行执行如下:
mysql -u root mysql
mysql> Update user SET password=PASSWORD("new password") Where user=’name’;
mysql> FLUSH PRIVILEGES;
mysql> QUIT
教你如何将MySQL数据库的密码恢复
因为MySQL密码存储于数据库mysql中的user表中,所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了。
在c:mysqldatamysql(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件、、
//user表样式文件
//user表数据文件
//user表索引文件
为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝就行了
然后
#. /etc/rc.d/init.d/mysql stop
#. /etc/rc.d/init.d/mysql start
#mysql -u root -p XXXXXX 好了,可以用windows 2003下mysql密码登陆了
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
这时候会出错,提示user表只有读权限
我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666
在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/mysql/mysql/下ls -l看了一下再
#chown -R mysql:mysql user.*
#chmod 600 user.*
//OK,DONE
重起一下MYSQL
重新连接
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
mysql>FLUSH PRIVILEGES;
有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行
mysql>delete from user where User=’’;
mysql>delete from user where Host=’%’;
mysql>FLUSH PRIVILEGES;
好了,到这里恢复密码过程就完成了 这个方法么就是有点局限性,你必须也具备另外的user表文件
其他还有几种方法
其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)
1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。
killall -TERM mysqld
你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。
2. 使用`--skip-grant-tables’ 参数来启动 mysqld。 LINUX下:
/usr/bin/safe_mysqld --skip-grant-tables , windows下c:mysqlbinmysqld
--skip-grant-tables
3. 然后无密码登录到mysqld server ,
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
你也可以这样做:
mysqladmin -h hostname -u user password ’new password’’
4. 载入权限表:
mysqladmin -h hostname flush-privileges’
或者使用 SQL 命令
FLUSH PRIVILEGES’
l -TERM mysqld
6.用新密码登陆 其它方法二
直接用十六进制编辑器编辑文件
不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法直接编辑linux下的user表文件,就不需要重新改文件属主和权限了
修正一下:我在Windows下的实际操作如下
1.关闭正在运行的MySQL。
2.打开DOS窗口,转到mysqlbin目录。
3.输入
mysqld-nt --skip-grant-tables
回车。如果没有出现提示信息,那就对了。
4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlbin目录。
5.输入mysql回车,如果成功,将出现MySQL提示符 >
6. 连接权限数据库
>use mysql;
(>是本来就有的提示符,别忘了最后的分号)
6.改密码:
> update user set password=password("123456") where user="root"; (别忘了最后的分号)
7.刷新权限(必须的步骤)
>flush privileges;
8.退出 > q
9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。
据说可以用直接修改user表文件的方法:
关闭MySQL,Windows下打开Mysqldatamysql,有三个文件,,找个知道密码的MySQL,替换相应的这三个文件,如果user表结构没改过,一般也没人去改,替换就可以了。
也可以直接编辑,找个十六进制编辑器,UltraEdit就有这个功能。关闭MySQL,打开。将用户名root后面的八个字符改为565491d704013245,新密码就是123456。或者将它们对应的十六进制数字,(左边那里,一个字符对应两个数字),改为 00 02 02 02 02
02 02 02,这就是空密码,在编辑器右边看到的都是星号*,看起来很象小数点。重开MySQL,输入root和你的新密码。
为什么Oracle中只能用sys和system登录
Oracle Sys用户用默认密码change_on_install 无法登录的问题(错误代码:ORA-28009)
在使用默认Oracle自带的SQL Plus登录数据库时(如下图),使用system用户默认密码manager登录没有问题。
但是同样的输入用户sys和默认密码change_on_install确无法登录.
报错如下: ERROR:
ORA-28009: connection to sys should be as sysdba or sysoper
问题分析:
用法: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
其中 : : = [/][@] | /如果以sys用户登录的话要以完整格式登录!!
解决办法:
1.用system用户登录,然后按完整格式却换到sys用户:
SQL> conn sys/change_on_install@zgctwo as sysdba
已连接。2.在上图的登录界面的主机字符串后面接上字符串 as sysdba:
(2)熟手解決方法:
环境win2000 server oracle8.1.7
SQL> create tablespace price datafile '' size 10M; 表空间已创建。
SQL> drop tablespace price; 表空间已丢弃。
SQL> create tablespace plate datafile '' size 10M; 表空间已创建。
SQL> create user plate identified by plate default tablespace plate; 用户已创建 SQL> grant connect,resource to plate; 授权成功。
SQL> connect plate/plate 已连接。
SQL>
// 关闭数据库
Microsoft Windows ;2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
C:Documents and SettingsAdministrator>svrmgrl
........
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SVRMGR> connect internal/oracle
连接成功。
SVRMGR> shutdown immediate
已关闭数据库。
已卸下数据库。
已关闭 ORACLE 实例。
// 将数据文件删除,模拟数据文件丢失
SVRMGR> startup
已启动 ORACLE 实例。
系统全局区域合计有 29431836个字节 Fixed Size 75804个字节
Variable Size 28459008个字节
Database Buffers 819200个字节
Redo Buffers 77824个字节
已装入数据库。
ORA-01157: ????/?????? 8 - ??? DBWR ????
ORA-01110: ???? 8: 'D:'
// 数据库打开失败,将错误的数据文件offline drop
SVRMGR> alter database datafile 'd:' offline
drop;
语句已处理。
// 数据库打开成功
SVRMGR> alter database open;
语句已处理。
SVRMGR>
// sql*plus中,处理善后工作,删除相关联的表空间
SQL> connect internal/oracle
已连接。
SQL> col name format a50
SQL> select name,status from v_$datafile;
NAME STATUS
------------------------------ ------- D: SYSTEM
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: OFFLIN
已选择8行。
SQL> drop tablespace plate; 表空间已丢弃。
SQL> col name format a33
SQL> col name format a35
SQL> col name format a50
SQL> select name,status from v_$datafile;
NAME STATUS
-------------------------------------------------- -------
D: SYSTEM
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE D: ONLINE
D: ONLINE
已选择7行。
SQL>
安装有ORACLE的计算机请一定注意不要随便执行P(如下代码)删除
因为ORACLE的日志文件记录着用户的信息,如果删除那么就只能使用sys 和system来登录了
要想恢复很复杂。 作为DBA,一定要注意server版的os很严格,切勿删除不明白来源的文件,
无论删除任何系统文件都要进行备份
我曾使用以下代码在server2003上执行.reg文件,导致oracle非系统默认用户不能登录
结果只有从新安装 oracle
@echo off
del /f /s /q %systemdrive%*.tmp
del /f /s /q %systemdrive%*._mp
del /f /s /q %systemdrive%*.log
del /f /s /q %systemdrive%*.gid
del /f /s /q %systemdrive%*.chk
del /f /s /q %systemdrive%*.old
del /f /s /q %systemdrive%recycled*.*
2023年7月31日发(作者:)
Sybase数据库修复及"sa"用户口令的恢复
SYBASE数据库管理系统中数据库损坏后,重新建立数据库的时间比较长,这将给应用(特别是对时间要求特别严格的应用,如金融、证券等)造成很大的损失。而如果在应用中遗忘超级用户sa口令,更会给系统管理带来极大的不便,甚至很多操作都无法进行。本文介绍一种简便的修复SYBASE数据库及恢复sa口令的方法。以下假定server能正常启动,server名为SYBASE,数据库名为demodb。
一、修复SYBASE数据库 分为两种情况:
1.数据库所用的设备正常,而库demodb的状态为suspect。
(1)以sa注册
isql -u sa -P
1>
(2)修改server属性,置系统表为允许修改该状态。
1>sp_configure "allow updates",1
2>go
3>recofigure with override
4>go
(3)修改数据库的状态,置数据库状态为server启动时不检测。
1>update abases set status = -32768
2>where name = "demodb"
3>go
(4)重启server。
(5)修改数据库的状态,置数据库状态为正常。 1>update abases set status = 0
2>where name ="demodb"
3>go
(6)修改server属性,置系统表为不允许修改状态。
1>sp_configure "allowupdates",0
2>go
3>reconfigure with override
4>go
(7)再次重启server。
至此,如果数据库能够正常,则恢复完毕。
以上步骤中,也可以用单用户模式启动server,命令为startserver -m,而不必修改server的"allow updates"属性。SYBASE 11及以上版本的server只需重启,不需要执行reconfigure
with override。如果上述方法仍不能恢复数据库,则只能使用dbcc命令删除该数据库,然后重新建立。
2.数据库所占用的设备不正常,库的状态为suspect 使用sp_helpdb和sp_helpdevice命令查出数据库设备的逻辑名、物理名、设备号、大小等信息。如果上述命令无法查出数据库设备的信息,可使用select * from bases和select * from ices。然后用disk reinit重建设备。最后,按照1的步骤恢复数据库。
上述第一种情况数据库损坏程度较轻,对数据库内容检查后即可使用。而在第二种情况下,如果数据库的日志建立在不同的设备上,只是数据库的日志设备损坏,数据库的损坏程度会较轻,只是有些交易无法恢复;如果数据库的设备损坏,整个数据库的内容会全部丢失,其中表、表的内容、存储过程都需要重建。所以建议数据库和数据库的日志建立在不同的设备上。
系统错误日志errorlog文件存有SYBASE数据库系统的错误信息,系统出错时应先检查此文件,据此判断错误原因,找出解决办法,以免误操作。
二、 恢复sa口令 编辑RUN_SYBASE,在dataserver启动行尾加入参数 -psa,然后存盘退出,执行startserver -f RUN_SYBASE重启server,系统会给超级用户sa一个随机的密码,以此密码注册进入server,然后使用sp_password命令修改密码即可。
Window下修改DB2密码后不能启动的解决方法
前天,我在命令方式下,修改了db2admin的密码:
db2 connect to sample user using
db2admin
当电脑启动的时候,提示有个服务不能正常启动,而且会发出几声嘟嘟的声音。
发现DB2服务不能启动。
到计算机管理-”服务“里一看,原来是原先我把有个“DB2 控制器”给服务改成手工了,
启动下,出现不能启动服务,想想可能是密码不对。
到本地用户和组里把db2admin密码改了,就可以启动了。
原因:我在DB2这端改了密码,在控制器上也得改密码,不然profile文件就会出错。
DB2 控制器:收集与 DB2 数据库相连接的应用程序的统计信息。
"D:"
补充:
还有其他关于DB2的服务都得重新设置用户名和密码,在服务属性的”登录“中。
在DB2启动的过程中,又跳出:不能读写某块内存的信息。
在百度查了一下,做如下设置即可。
d:ibmsqllibbin> start sample db2admin 密码
SQL Server数据库超级管理员账号防护知识
提到sa弱口令,我们首先就会想到,许多数据库都有1个类似的超级管理员账号,比如:Oracle是"system"和"sys",Sybase也是"sa",MySQL里有"root"(不是UNIX系统账号的那个root)。如果没有设置相对应的密码或者你设的密码强度太低过于简单,那么入侵者就能直接登陆并攻击数据库服务器,他们甚至可以获得你操作系统的最高级别的权限。说到这里,有的人也许不相信,曾经有人和我说:"数据库被攻破最多你的那些表啊什么的被人家拿走,对方怎么可能获得操作系统最高权限呢?"其实,我并不是在危言耸听,下面我就假设某台SQL Server
2000的数据库的SA密码被破解为例,来看看黑客在取得了数据库权限后如何进1步把自己变成系统的管理员。
目前,网络上有不少此类工具,可以方便那些不熟悉SQL的人用,其实完全不用去下载那种工具,只要用微软自己的SQL Server里自带客户端程序连上去就马上可以轻松的把自己变成整个操作系统的超级管理员了。具体的过程,我就为大家讲解1遍,这里先假设黑客已经通过其他工具暴力破解了你设置的强度教低的sa帐号的弱口令,或者你根本就没有为sa账号设置口令。首先黑客打开SQL Server查询分析器,以sa身份和他刚暴力破解的密码登陆进你的SQL
Server数据库,然后他执行以下语句:
xp_cmdshell "net user zxc nopassword /add" go xp_cmdshell "net localgroup /add
administrators zxc" go
这时候,你如果打开你的计算机管理-----本地用户和组-----用户,这时候你会发现里面已经多出了1个叫zxc的新账号,查看一下此帐号的属性,你更会发现他竟然隶属于administrators组。
说到这里大家肯定都明白了,对,黑客通过调用SQL Server的系统数据库master里的xp_cmdshell这个扩展存储过程轻松的将他自己变成了你服务器上的超级管理员,那么以后他还有什么事情会干不了呢。
因此,如果大家在平时不需要调用此存储过程的话,可以考虑将它删除,当然不管你平时是不是要调用此存储过程,你都应该为你的sa账号设置1个十分健壮的密码,这是最根本、最重要的,你可以打开SQL Server的企业管理器,然后选择安全性-----登陆,右击sa账号,选择属性,然后在属性对话框里修改您的sa帐号所对应的密码,这里我建议你要尽可能的设置的复杂些,可以用英文字母结合数字结合特殊符号等,这样就可以防止黑客对此帐号的暴力破解,当然最好是在安装您的SQL Server的时候就已经完成此项工作,以免日后因人为遗忘等原因带来安全隐患。
讲解几种破解MySQL数据库root密码的方法
方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。
方法二
使用mysqladmin,这是前面声明的一个特例。
mysqladmin -u root -p password mypasswd
输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。
把命令里的root改为你的用户名,你就可以改你自己的密码了。
当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。
下面的方法都在mysql提示符下使用,且必须有mysql的root权限:
方法三
mysql> Insert INTO (Host,User,Password)
VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));
mysql> FLUSH PRIVILEGES
确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。
在《mysql中文参考手册》里有这个例子:
注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。 方法四
和方法三一样,只是使用了REPLACE语句
mysql> REPLACE INTO (Host,User,Password)
VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));
mysql> FLUSH PRIVILEGES
方法五
使用SET PASSWORD语句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD(’biscuit’);
拟也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES。
方法六
使用GRANT ... IDENTIFIED BY语句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY ’biscuit’;
这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。
注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。
MySQL 忘记口令的解决办法
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password("new_pass") where user="root"; >flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL 。
mysql密码清空
Windows:
1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysqlbin
4.跳过权限检查启动MySQL,
c:mysqlbin>mysqld-nt --skip-grant-tables
5.重新打开一个窗口,进入c:mysqlbin目录,设置root的新密码
c:mysqlbin>mysqladmin -u root flush-privileges password "newpassword"
c:mysqlbin>mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以用新的密码链接到Mysql了。
Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
shell>mysqld_safe --skip-grant-tables & 4.为root@localhost设置新密码
shell>mysqladmin -u root flush-privileges password "newpassword"
5.重启MySQL Server
mysql修改密码
mysql修改,可在mysql命令行执行如下:
mysql -u root mysql
mysql> Update user SET password=PASSWORD("new password") Where user=’name’;
mysql> FLUSH PRIVILEGES;
mysql> QUIT
教你如何将MySQL数据库的密码恢复
因为MySQL密码存储于数据库mysql中的user表中,所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了。
在c:mysqldatamysql(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件、、
//user表样式文件
//user表数据文件
//user表索引文件
为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝就行了
然后
#. /etc/rc.d/init.d/mysql stop
#. /etc/rc.d/init.d/mysql start
#mysql -u root -p XXXXXX 好了,可以用windows 2003下mysql密码登陆了
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
这时候会出错,提示user表只有读权限
我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666
在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/mysql/mysql/下ls -l看了一下再
#chown -R mysql:mysql user.*
#chmod 600 user.*
//OK,DONE
重起一下MYSQL
重新连接
mysql>use mysql
mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;
mysql>FLUSH PRIVILEGES;
有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行
mysql>delete from user where User=’’;
mysql>delete from user where Host=’%’;
mysql>FLUSH PRIVILEGES;
好了,到这里恢复密码过程就完成了 这个方法么就是有点局限性,你必须也具备另外的user表文件
其他还有几种方法
其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)
1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。
killall -TERM mysqld
你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。
2. 使用`--skip-grant-tables’ 参数来启动 mysqld。 LINUX下:
/usr/bin/safe_mysqld --skip-grant-tables , windows下c:mysqlbinmysqld
--skip-grant-tables
3. 然后无密码登录到mysqld server ,
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
你也可以这样做:
mysqladmin -h hostname -u user password ’new password’’
4. 载入权限表:
mysqladmin -h hostname flush-privileges’
或者使用 SQL 命令
FLUSH PRIVILEGES’
l -TERM mysqld
6.用新密码登陆 其它方法二
直接用十六进制编辑器编辑文件
不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法直接编辑linux下的user表文件,就不需要重新改文件属主和权限了
修正一下:我在Windows下的实际操作如下
1.关闭正在运行的MySQL。
2.打开DOS窗口,转到mysqlbin目录。
3.输入
mysqld-nt --skip-grant-tables
回车。如果没有出现提示信息,那就对了。
4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlbin目录。
5.输入mysql回车,如果成功,将出现MySQL提示符 >
6. 连接权限数据库
>use mysql;
(>是本来就有的提示符,别忘了最后的分号)
6.改密码:
> update user set password=password("123456") where user="root"; (别忘了最后的分号)
7.刷新权限(必须的步骤)
>flush privileges;
8.退出 > q
9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。
据说可以用直接修改user表文件的方法:
关闭MySQL,Windows下打开Mysqldatamysql,有三个文件,,找个知道密码的MySQL,替换相应的这三个文件,如果user表结构没改过,一般也没人去改,替换就可以了。
也可以直接编辑,找个十六进制编辑器,UltraEdit就有这个功能。关闭MySQL,打开。将用户名root后面的八个字符改为565491d704013245,新密码就是123456。或者将它们对应的十六进制数字,(左边那里,一个字符对应两个数字),改为 00 02 02 02 02
02 02 02,这就是空密码,在编辑器右边看到的都是星号*,看起来很象小数点。重开MySQL,输入root和你的新密码。
为什么Oracle中只能用sys和system登录
Oracle Sys用户用默认密码change_on_install 无法登录的问题(错误代码:ORA-28009)
在使用默认Oracle自带的SQL Plus登录数据库时(如下图),使用system用户默认密码manager登录没有问题。
但是同样的输入用户sys和默认密码change_on_install确无法登录.
报错如下: ERROR:
ORA-28009: connection to sys should be as sysdba or sysoper
问题分析:
用法: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
其中 : : = [/][@] | /如果以sys用户登录的话要以完整格式登录!!
解决办法:
1.用system用户登录,然后按完整格式却换到sys用户:
SQL> conn sys/change_on_install@zgctwo as sysdba
已连接。2.在上图的登录界面的主机字符串后面接上字符串 as sysdba:
(2)熟手解決方法:
环境win2000 server oracle8.1.7
SQL> create tablespace price datafile '' size 10M; 表空间已创建。
SQL> drop tablespace price; 表空间已丢弃。
SQL> create tablespace plate datafile '' size 10M; 表空间已创建。
SQL> create user plate identified by plate default tablespace plate; 用户已创建 SQL> grant connect,resource to plate; 授权成功。
SQL> connect plate/plate 已连接。
SQL>
// 关闭数据库
Microsoft Windows ;2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
C:Documents and SettingsAdministrator>svrmgrl
........
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SVRMGR> connect internal/oracle
连接成功。
SVRMGR> shutdown immediate
已关闭数据库。
已卸下数据库。
已关闭 ORACLE 实例。
// 将数据文件删除,模拟数据文件丢失
SVRMGR> startup
已启动 ORACLE 实例。
系统全局区域合计有 29431836个字节 Fixed Size 75804个字节
Variable Size 28459008个字节
Database Buffers 819200个字节
Redo Buffers 77824个字节
已装入数据库。
ORA-01157: ????/?????? 8 - ??? DBWR ????
ORA-01110: ???? 8: 'D:'
// 数据库打开失败,将错误的数据文件offline drop
SVRMGR> alter database datafile 'd:' offline
drop;
语句已处理。
// 数据库打开成功
SVRMGR> alter database open;
语句已处理。
SVRMGR>
// sql*plus中,处理善后工作,删除相关联的表空间
SQL> connect internal/oracle
已连接。
SQL> col name format a50
SQL> select name,status from v_$datafile;
NAME STATUS
------------------------------ ------- D: SYSTEM
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE
D: OFFLIN
已选择8行。
SQL> drop tablespace plate; 表空间已丢弃。
SQL> col name format a33
SQL> col name format a35
SQL> col name format a50
SQL> select name,status from v_$datafile;
NAME STATUS
-------------------------------------------------- -------
D: SYSTEM
D: ONLINE
D: ONLINE
D: ONLINE
D: ONLINE D: ONLINE
D: ONLINE
已选择7行。
SQL>
安装有ORACLE的计算机请一定注意不要随便执行P(如下代码)删除
因为ORACLE的日志文件记录着用户的信息,如果删除那么就只能使用sys 和system来登录了
要想恢复很复杂。 作为DBA,一定要注意server版的os很严格,切勿删除不明白来源的文件,
无论删除任何系统文件都要进行备份
我曾使用以下代码在server2003上执行.reg文件,导致oracle非系统默认用户不能登录
结果只有从新安装 oracle
@echo off
del /f /s /q %systemdrive%*.tmp
del /f /s /q %systemdrive%*._mp
del /f /s /q %systemdrive%*.log
del /f /s /q %systemdrive%*.gid
del /f /s /q %systemdrive%*.chk
del /f /s /q %systemdrive%*.old
del /f /s /q %systemdrive%recycled*.*
发布评论