用Python设置SYSTEM账户解锁🔓并密码永不过期(Oracle 11g兼容版本)
🔓登录dba账户解锁system账户
import cx_Oracle
from cx_Oracle import Error
def unlock_system_account():
try:
# 以SYSDBA身份连接
connection = cx_Oracle.connect(
user="sys", # 使用sys账户
password="oracle", # sys账户密码
dsn="localhost:1521/orcl",
mode=cx_Oracle.SYSDBA
)
print("成功以SYSDBA身份连接到Oracle数据库")
# 解锁SYSTEM账户
cursor = connection.cursor()
cursor.execute("ALTER USER SYSTEM ACCOUNT UNLOCK")
connection.commit()
print("成功解锁SYSTEM账户")
# 验证账户状态
cursor.execute("""
SELECT username, account_status, lock_date, expiry_date
FROM dba_users
WHERE username = 'SYSTEM'
""")
result = cursor.fetchone()
print(f"\n账户状态验证:")
print(f"用户名: {result[0]}")
print(f"状态: {result[1]}")
print(f"锁定日期: {result[2]}")
print(f"过期日期: {result[3]}")
cursor.close()
connection.close()
except Error as e:
print(f"操作失败: {e}")
if 'connection' in locals():
connection.close()
if __name__ == "__main__":
# 如果需要指定Oracle客户端路径
# cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_10")
unlock_system_account()
设置密码永不过期
1 import cx_Oracle 2 from cx_Oracle import Error 3 4 def set_system_password_never_expire(): 5 """ 6 设置SYSTEM账户密码永不过期(Oracle 11g兼容版本) 7 """ 8 try: 9 # 以SYSDBA身份连接 10 connection = cx_Oracle.connect( 11 user="sys", # 使用sys账户 12 password="oracle", # sys账户密码 13 dsn="localhost:1521/orcl", 14 mode=cx_Oracle.SYSDBA 15 ) 16 17 print("成功以SYSDBA身份连接到Oracle数据库") 18 19 cursor = connection.cursor() 20 21 # 1. 首先解锁SYSTEM账户(如果被锁定) 22 try: 23 cursor.execute("ALTER USER SYSTEM ACCOUNT UNLOCK") 24 print("已确保SYSTEM账户处于解锁状态") 25 except Error as e: 26 print(f"解锁SYSTEM账户时出现警告: {e}") 27 28 # 2. 修改DEFAULT profile的密码策略(Oracle 11g兼容方式) 29 cursor.execute(""" 30 ALTER PROFILE DEFAULT LIMIT 31 PASSWORD_LIFE_TIME UNLIMITED 32 PASSWORD_GRACE_TIME UNLIMITED 33 """) 34 35 # 3. 重置SYSTEM账户密码状态(使其不受之前过期策略影响) 36 cursor.execute("ALTER USER SYSTEM IDENTIFIED BY oracle") # 使用当前密码或设置新密码 37 38 connection.commit() 39 print("成功设置密码永不过期策略") 40 41 # 验证设置结果 42 print("\n验证密码过期策略:") 43 cursor.execute(""" 44 SELECT username,account_status,expiry_date, 45 profile, 46 TO_CHAR(created, 'YYYY-MM-DD') as created_date 47 FROM dba_users 48 WHERE username = 'SYSTEM' 49 """) 50 51 user_info = cursor.fetchone() 52 print(f"用户名: {user_info[0]}") 53 print(f"账户状态: {user_info[1]}") 54 print(f"过期日期: {user_info[2] or '永不'}") 55 print(f"使用的profile: {user_info[3]}") 56 print(f"创建日期: {user_info[4]}") 57 58 print("\n验证DEFAULT profile设置:") 59 cursor.execute(""" 60 SELECT resource_name, limit 61 FROM dba_profiles 62 WHERE profile = 'DEFAULT' 63 AND resource_name LIKE 'PASSWORD%LIFE%' 64 OR resource_name LIKE 'PASSWORD%GRACE%' 65 """) 66 67 for row in cursor: 68 print(f"{row[0]}: {row[1]}") 69 70 cursor.close() 71 connection.close() 72 73 except Error as e: 74 print(f"操作失败: {e}") 75 if 'connection' in locals(): 76 connection.rollback() 77 connection.close() 78 79 if __name__ == "__main__": 80 # 如果需要指定Oracle客户端路径 81 # cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_10") 82 83 set_system_password_never_expire()