使用python快速梳理oracle用戶的權(quán)限,生成Excel表格

需求:梳理Oracle數(shù)據(jù)庫(kù)的用戶權(quán)限,并生成Excel表格。
腳本說(shuō)明:

  1. 數(shù)據(jù)庫(kù)類型:oracle,查詢視圖: dba_role_privs,dba_sys_privs,dba_tab_privs
  2. python模塊: cx_Oracle,xlwt
  3. 當(dāng)前腳本配置為單臺(tái)數(shù)據(jù)庫(kù):
db = cx_Oracle.connect('username','passwd','192.168.xx.xx:1521/orcl')

具體案例:

################################################################################
#Coding     : utf-8
#FileName   : dba_privileges.py
#Desc       : [Oracle] 獲取數(shù)據(jù)庫(kù)權(quán)限信息:
#             dba_role_privs,dba_sys_privs,dba_tab_privs
#call       : python dba_privileges.py
#example    :
#             version history
#----------------------------------|
#version    | 1.0                  |
#----------------------------------|
#Coder      | Tangwen              |
#----------------------------------|
#Code date  | 2019/xx/xx           |
#----------------------------------|
#Modify note| initial              |
#----------------------------------|
################################################################################

import os,sys,csv
import cx_Oracle
import xlwt

# 獲取用戶角色授權(quán)信息
SQL_dba_role_privs = '''
select grantee, granted_role
  from dba_role_privs
 where grantee in
       (select username
          from dba_users
         where ACCOUNT_STATUS = 'OPEN'
           and username not in
               ('SYS', 'SYSTEM', 'OUTLN', 'MGMT_VIEW', 'FLOWS_FILES', 'MDSYS',
                'ORDSYS', 'EXFSYS', 'DBSNMP', 'WMSYS', 'APPQOSSYS',
                'APEX_030200', 'OWBSYS_AUDIT', 'ORDDATA', 'CTXSYS',
                'ANONYMOUS', 'SYSMAN', 'XDB', 'ORDPLUGINS', 'OWBSYS',
                'SI_INFORMTN_SCHEMA', 'OLAPSYS', 'SCOTT', 'ORACLE_OCM',
                'XS$NULL', 'MDDATA', 'DIP', 'APEX_PUBLIC_USER',
                'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR'))
 order by grantee
'''

# 獲取用戶系統(tǒng)權(quán)限信息
SQL_dba_sys_privs = '''
select grantee, privilege
  from dba_sys_privs
 where grantee in
       (select username
          from dba_users
         where ACCOUNT_STATUS = 'OPEN'
           and username not in
               ('SYS', 'SYSTEM', 'OUTLN', 'MGMT_VIEW', 'FLOWS_FILES', 'MDSYS',
                'ORDSYS', 'EXFSYS', 'DBSNMP', 'WMSYS', 'APPQOSSYS',
                'APEX_030200', 'OWBSYS_AUDIT', 'ORDDATA', 'CTXSYS',
                'ANONYMOUS', 'SYSMAN', 'XDB', 'ORDPLUGINS', 'OWBSYS',
                'SI_INFORMTN_SCHEMA', 'OLAPSYS', 'SCOTT', 'ORACLE_OCM',
                'XS$NULL', 'MDDATA', 'DIP', 'APEX_PUBLIC_USER',
                'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR'))
 order by grantee
'''

# 獲取用戶授權(quán)表信息
SQL_dba_tab_privs = '''
select grantee,owner,table_name,privilege,grantor
  from dba_tab_privs
 where grantee in
       (select username
          from dba_users
         where ACCOUNT_STATUS = 'OPEN'
           and username not in
               ('SYS', 'SYSTEM', 'OUTLN', 'MGMT_VIEW', 'FLOWS_FILES', 'MDSYS',
                'ORDSYS', 'EXFSYS', 'DBSNMP', 'WMSYS', 'APPQOSSYS',
                'APEX_030200', 'OWBSYS_AUDIT', 'ORDDATA', 'CTXSYS',
                'ANONYMOUS', 'SYSMAN', 'XDB', 'ORDPLUGINS', 'OWBSYS',
                'SI_INFORMTN_SCHEMA', 'OLAPSYS', 'SCOTT', 'ORACLE_OCM',
                'XS$NULL', 'MDDATA', 'DIP', 'APEX_PUBLIC_USER',
                'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR'))
 order by grantee
'''

#設(shè)置表格樣式
def set_style(name,height,bold=False):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.name = name
    font.bold = bold
    font.color_index = 4
    font.height = height
    style.font = font
    return style

def DB_getData(execSQL):
    db = cx_Oracle.connect('username','passwd','192.168.xx.xx:1521/orcl')
    cur = db.cursor()
    cur.execute(execSQL)
    results = cur.fetchall()

    # 獲取列名,將列名保存到row0列表
    Titles = []
    for col in cur.description:
        Titles.append(col[0])

    # 獲取數(shù)據(jù)
    Results = []
    for result in results:
        Results.append(result)

    cur.close()
    db.close()

    return Titles,Results

def writeExcel():
    wb = xlwt.Workbook(encoding='utf-8')

    for k,v in dba_privilegesSQL.items():
        # print(dba_privilegesSQL[k])
        Title,Results = DB_getData(v)

        # 創(chuàng)建一個(gè)worksheet
        ws = wb.add_sheet(k,cell_overwrite_ok=False)

        # 1.excel:寫第一行,標(biāo)題
        # Example: Title = ['GRANTEE', 'GRANTED_ROLE']
        # print(Title,Results)
        for idex, val in enumerate(Title):
            ws.write(0, idex, val, set_style('Times New Roman', 220, True))

        # 2.寫入數(shù)據(jù)到對(duì)應(yīng)的sheet
        for index,value in enumerate(Results):
            for j,v in enumerate(value):
                ws.write(index+1, j, v)

    wb.save('dba_privileges.xls')

if __name__ == '__main__':
    # 字典配置[config]
    dba_privilegesSQL = {
        'dba_role_privs': SQL_dba_role_privs,
        'dba_sys_privs': SQL_dba_sys_privs,
        'dba_tab_privs': SQL_dba_tab_privs
    }
    writeExcel()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容