一个简单的修改sys用户密码的问题

zhengmushang 2012-10-10 04:51:21
要做一个功能,修改sys用户的密码。


//数据库连接字符串
string oracleStr = string.Format(@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT=1521)))(CONNECT_DATA=(SERVER={0})(SERVICE_NAME={1})));User={2};Password={3};Persist Security Info=true;", ip, sid, uid, oldPwd);

//打开数据库
OracleConnection con = new OracleConnection(oracleStr);
con.Open();//在这里提示: ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

//执行
string cmdStr = "update dba_users set password='" + newPwd + "' where username='" + uid + "'";
OracleCommand cmd = new OracleCommand(cmdStr, con);
cmd.ExecuteNonQuery();

//关闭数据库连接
con.Close();
con.Dispose();


con.Open();--------在这里提示: ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接
该如何修改呢?

...全文
498 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
鲁某某 2014-02-19
  • 打赏
  • 举报
回复
我也遇到了这个问题,期待正确答案。。
陈字文 2012-10-12
  • 打赏
  • 举报
回复
期待正确答案,这个问题比较有意思.
彼岸大灰狼 2012-10-11
  • 打赏
  • 举报
回复
用system用户可以修改sys的密码,检查你的system用户是否有DBA的角色,我曾经见过某个数据库的system用户竟然没有DBA角色
zhengmushang 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

oldPwd 传参的时候 传 密码+空格+as sysdba
[/Quote]

按你说的,改成Password={3} as sysdba
还是不行,提示:
ORA-01017: 用户名/口令无效; 登录被拒绝
BenChiM888 2012-10-11
  • 打赏
  • 举报
回复
oldPwd 传参的时候 传 密码+空格+as sysdba
zhengmushang 2012-10-11
  • 打赏
  • 举报
回复
加了:DBA Privilege=SYSDBA;
string oracleStr = string.Format(@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT=1521)))(CONNECT_DATA=(SERVER={0})(SERVICE_NAME={1})));User Id={2};Password={3};DBA Privilege=SYSDBA;", ip, sid, uid, oldPwd);


cmd.ExecuteNonQuery();
这里报错:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
cowboyhn 2012-10-11
  • 打赏
  • 举报
回复
给你个JAVA的例子,你看C#是否也有internal_logon参数:

String url="jdbc:oracle:thin:@localhost:1521:testdb";
Properties connProperty = new Properties();
connProperty.put("user", "sys");
connProperty.put("password", "abc123");
connProperty.put("internal_logon", "sysdba");

Connection conn = DriverManager.getConnection(url,connProperty);
BenChiM888 2012-10-11
  • 打赏
  • 举报
回复
次奥, 你给 oldPwd 赋值的时候按照
密码+空格+as sysdba 赋值

[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

oldPwd 传参的时候 传 密码+空格+as sysdba


按你说的,改成Password={3} as sysdba
还是不行,提示:
ORA-01017: 用户名/口令无效; 登录被拒绝
[/Quote]
zhengmushang 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不要用sys用户连接,使用system
[/Quote]

这个也试过了,用system用户的话,修改system密码,会在
cmd.ExecuteNonQuery();
这里提示“ORA-01031: 权限不足。”

咋整?
ray_suen 2012-10-10
  • 打赏
  • 举报
回复
不要用sys用户连接,使用system

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧