Oracle 10g 和 PowerShell - 如何创建散列密码

Oracle 10g & PowerShell - How to create hashed password

我有一个 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

我已经设法为需要复制相同功能的任何人找到 work-around。

我已经默认了这一行 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 上执行此操作。