【问题标题】:Oracle 10g & PowerShell - How to create hashed passwordOracle 10g & PowerShell - 如何创建散列密码
【发布时间】:2022-01-21 08:53:09
【问题描述】:

我有一个 PowerShell 脚本,它将创建一个新的 Oracle 用户。代码正确,用户按预期创建。我唯一的问题是复制 Oracle 的密码散列。

我希望能够使用与 Oracle 10g 相同的算法在 PowerShell 中对密码进行哈希处理,然后使用此代码将哈希密码插入 Oracle。 IDENTIFIED BY VALUES 'NEED TO INSERT HASHED PASSWORD'.

这是数据库中当前密码的示例:IDENTIFIED BY VALUES '033348433385A2DE'

我在 PowerShell 中尝试了一些操作,但无法正常工作。据我了解,Oracle 使用用户名和密码组合来生成散列值等。任何建议将不胜感激。

这是我目前正在使用的代码。它建立一个 Oracle 连接,然后插入所需的信息。

$login_newname = 'SomeName'
    
$query_user =  CREATE USER $login_newname
      IDENTIFIED BY VALUES 'NEED TO INSERT HASHED PASSWORD'
      DEFAULT TABLESPACE USER_DATA
      TEMPORARY TABLESPACE TEMPORARY_DATA
      PROFILE DEFAULT
      ACCOUNT UNLOCK"

$connectionstring = "User Id = $username;Password = $password;Data Source = $datasource"
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection(“$connectionString”)
$con.open()
$cmd=$con.CreateCommand()



$query_user_1 = "GRANT CONNECT TO $login_newname WITH ADMIN OPTION"
$query_user_2 = "GRANT RESOURCE TO $login_newname WITH ADMIN OPTION"
$query_user_3 = "GRANT ALL_ACCESS TO $login_newname WITH ADMIN OPTION"
$query_user_4 = "ALTER USER $login_newname DEFAULT ROLE CONNECT, RESOURCE"
$query_user_5 = "GRANT SELECT ANY TABLE TO $login_newname WITH ADMIN OPTION"
$query_user_6 = "GRANT UNLIMITED TABLESPACE TO $login_newname WITH ADMIN OPTION"


$cmd.CommandText=$query_user 
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_1
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_2
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_3
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_4
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_5
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText=$query_user_6
$cmd.ExecuteNonQuery() | Out-Null

【问题讨论】:

  • 看起来像 Oracle 的salting 密码。也许解释一下您要解决的root problem,因为您之前的(已删除)问题是关于用户表上的原始插入。问题是,Oracle 中的任何更新都可能破坏您的散列副本系统,因此需要更持久的解决方案。
  • 我之前的问题与此无关。那是一个完全不同的数据库,无法在那个数据库中创建用户。它只是插入到表中。请忽略它,因为它已经因此被删除。
  • 不清楚您是否停留在算法上(explained here,带有演示 PL/SQL 实现),或者您理解这一点但停留在 PowerShell 中使用加密。 “我尝试了一些事情”并没有告诉我们您对哪个部分有问题;您发布的代码是除了您尝试创建哈希值的所有内容。
  • 我还想问您为什么要这样做 - 进行自己的散列而不是仅使用 create user 中的普通密码有什么好处?使用identified by values 通常仅在您不知道密码时对重新创建用户有用 - 例如将用户从一个数据库迁移到另一个数据库 - 基于我多年前做这种事情的逐渐消失的记忆。
  • 根据数据库的版本和COMPATIBILITY 参数设置,Oracle 可以使用不同的算法为每个用户维护多个散列。使用技术上不支持的IDENTIFIED BY 参数可能会导致与某些客户端连接不兼容。如果您要与之同步,我也建议您使用集成的 Windows 身份验证。

标签: oracle powershell oracle10g password-hash


【解决方案1】:

我已设法为需要复制相同功能的任何人找到解决方法。

我已将这一行默认为 IDENTIFIED BY VALUES 'password' 。这将在 Oracle 中创建一个密码为“password”的用户,但不会应用散列。

我不得不多加一行:

$query_user_7 = "ALTER USER $login_newname IDENTIFIED BY password(This can be anything, your desired password)"

然后像这样执行查询:

$cmd.CommandText=$query_user_7
$cmd.ExecuteNonQuery() | Out-Null

这会将 Oracle 哈希应用于您的新密码,并允许您登录。

请注意,这适用于 Oracle 10g。我没有尝试在更高版本的 Oracle 上执行此操作。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2011-05-10
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多