暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Python大数据与SQL优化笔记 2019-03-26
268

点击上方"Python与大数据笔记"关注我们哦

点击关注有惊喜送给你哦!~

凡事预则立 不预则废






"""

目的: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中


文章转载自Python大数据与SQL优化笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论