Python操作Postgresql数据库实现夸库赋权

关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~

 

"""

目的:postgresql不支持夸库去操作赋权

及不支持grant select on all tables in schema xxxx.public to 'user';

"""

import psycopg2,sys


__author__ = '南山南'
"""
接受py文件参数
parameter:前端java程序传入的组合字符串
delimite_flag:字符串分隔符
类型:

user1,db1,read,Y|user2,db2,read,Y|user3,db3,read,Y|user4,db3,write,Y
"""
parameter = sys.argv[1]
delimite_flag = sys.argv[2]
# dbname = sys.argv[3]
##print(parameter.split('|'))
# list_dbname = []
# for name in parameter.split('|'):
#         #print(name.split(',')[1])
#         list_dbname.append(name.split(',')[1])
# list_dbname=list(set(list_dbname))
# #print(list_dbname)
"""
解析传入的parameter参数,获取数据名称并且去除
"""
list_db = {name.lower().split(',')[1]  for name in parameter.split('|')}
list_db=list(list_db)
print(list_db)



"""
遍历数据库名称,建立数据库连接,数据库名称传入SP,在独立的数据库下进行赋权操作
"""
for db_name in list_db:
        print("Begin connect to %s database and grant or revoke object access!" %(db_name))
        str = "dbname='%(dbname)s' \
                user='%(user)s' \
                password='%(password)s' \
                port='%(port)s' \
                host='%(host)s'" \
                % {'dbname': db_name, \
                    'user': 'xxx', \
                    'password': 'xxxx', \
                    'port': '5432', \
                    'host': 'xxxx'}
        # print(str)
        conn = psycopg2.connect(str)
        cur = conn.cursor()
        cur.execute("select * from sp_test('%s','%s','%s');" % (sys.argv[1],sys.argv[2],db_name))
        #cur.execute("select * from tmp_table;")
        rows = cur.fetchall()
        print(rows)
        for i in rows:
                print(i)
        conn.commit()
        cur.close()
        conn.close()

print("End connect to %s database and grant or revoke object access!" %(db_name))

主要的赋权路径是写在sp_test这个存储过程里面的,这里接不贴了,大家可以看看怎么去

连接数据库,接受前端参数,并且对前端参数做一定处理,传入到Python中

猜你喜欢

转载自blog.csdn.net/yrg5101/article/details/88825364