Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d1ae156d
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d1ae156d
编写于
6月 28, 2023
作者:
C
chao.feng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add user privilege cases of insert and select operation for stable,child table and table by charle
上级
255c9be2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
409 addition
and
0 deletion
+409
-0
tests/system-test/0-others/user_privilege_all.py
tests/system-test/0-others/user_privilege_all.py
+409
-0
未找到文件。
tests/system-test/0-others/user_privilege_all.py
0 → 100644
浏览文件 @
d1ae156d
from
itertools
import
product
import
taos
import
time
from
taos.tmq
import
*
from
util.cases
import
*
from
util.common
import
*
from
util.log
import
*
from
util.sql
import
*
from
util.sqlset
import
*
class
TDTestCase
:
"""This test case is used to veirfy the user privilege for insert and select operation on
stable、child table and table
"""
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
self
.
replicaVar
=
int
(
replicaVar
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
# init the tdsql
tdSql
.
init
(
conn
.
cursor
())
self
.
setsql
=
TDSetSql
()
# user info
self
.
username
=
'test'
self
.
password
=
'test'
# db info
self
.
dbname
=
"user_privilege_all_db"
self
.
stbname
=
'stb'
self
.
common_tbname
=
"tb"
self
.
ctbname_list
=
[
"ct1"
,
"ct2"
]
self
.
common_table_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'float'
,
'col2'
:
'int'
}
self
.
stable_column_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'float'
,
'col2'
:
'int'
,
}
self
.
tag_dict
=
{
'ctbname'
:
'binary(10)'
}
# case list
self
.
cases
=
{
"test_db_table_both_no_permission"
:
{
"db_privilege"
:
"none"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct1 using stb tags('ct1') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
False
,
False
,
False
,
False
,
False
]
},
"test_db_no_permission_table_read"
:
{
"db_privilege"
:
"none"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"read"
,
"sql"
:
[
"insert into ct1 using stb tags('ct1') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
False
,
False
,
False
,
False
,
True
]
},
"test_db_no_permission_childtable_read"
:
{
"db_privilege"
:
"none"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"read"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct1 using stb tags('ct1') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
False
,
False
,
False
]
},
"test_db_no_permission_table_write"
:
{
"db_privilege"
:
"none"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"write"
,
"sql"
:
[
"insert into ct1 using stb tags('ct1') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
False
,
False
,
False
,
True
,
False
]
},
"test_db_no_permission_childtable_write"
:
{
"db_privilege"
:
"none"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"write"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
True
,
False
,
False
,
False
,
False
,
False
]
},
"test_db_read_table_no_permission"
:
{
"db_privilege"
:
"read"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
True
,
False
,
True
]
},
"test_db_read_table_read"
:
{
"db_privilege"
:
"read"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"read"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
True
,
False
,
True
]
},
"test_db_read_childtable_read"
:
{
"db_privilege"
:
"read"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"read"
,
"child_table_ct2_privilege"
:
"read"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 3.3, 3);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
True
,
False
,
True
]
},
"test_db_read_table_write"
:
{
"db_privilege"
:
"read"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"write"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 4.4, 4);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
True
,
True
,
True
]
},
"test_db_read_childtable_write"
:
{
"db_privilege"
:
"read"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"write"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 1.1, 1)"
,
"insert into ct1 using stb tags('ct1') values(now, 5.5, 5)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 4.4, 4);"
,
"select * from tb;"
],
"res"
:
[
False
,
True
,
True
,
True
,
True
,
False
,
True
]
},
"test_db_write_table_no_permission"
:
{
"db_privilege"
:
"write"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 6.6, 6)"
,
"insert into ct1 using stb tags('ct1') values(now, 7.7, 7)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 8.8, 8);"
,
"select * from tb;"
],
"res"
:
[
True
,
True
,
False
,
False
,
False
,
True
,
False
]
},
"test_db_write_table_write"
:
{
"db_privilege"
:
"write"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 9.9, 9)"
,
"insert into ct1 using stb tags('ct1') values(now, 10.0, 10)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 11.1, 11);"
,
"select * from tb;"
],
"res"
:
[
True
,
True
,
False
,
False
,
False
,
True
,
False
]
},
"test_db_write_childtable_write"
:
{
"db_privilege"
:
"write"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 12.2, 12)"
,
"insert into ct1 using stb tags('ct1') values(now, 13.3, 13)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 14.4, 14);"
,
"select * from tb;"
],
"res"
:
[
True
,
True
,
False
,
False
,
False
,
True
,
False
]
},
"test_db_write_table_read"
:
{
"db_privilege"
:
"write"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"none"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"read"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 15.5, 15)"
,
"insert into ct1 using stb tags('ct1') values(now, 16.6, 16)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 17.7, 17);"
,
"select * from tb;"
],
"res"
:
[
True
,
True
,
False
,
False
,
False
,
True
,
True
]
},
"test_db_write_childtable_read"
:
{
"db_privilege"
:
"write"
,
"stable_priviege"
:
"none"
,
"child_table_ct1_privilege"
:
"read"
,
"child_table_ct2_privilege"
:
"none"
,
"table_tb_privilege"
:
"none"
,
"sql"
:
[
"insert into ct2 using stb tags('ct2') values(now, 18.8, 18)"
,
"insert into ct1 using stb tags('ct1') values(now, 19.9, 19)"
,
"select * from stb;"
,
"select * from ct1;"
,
"select * from ct2;"
,
"insert into tb values(now, 20.0, 20);"
,
"select * from tb;"
],
"res"
:
[
True
,
True
,
True
,
True
,
False
,
True
,
False
]
}
}
def
prepare_data
(
self
):
"""Create the db and data for test
"""
tdLog
.
debug
(
"Start to prepare the data for test"
)
# create datebase
tdSql
.
execute
(
f
"create database
{
self
.
dbname
}
"
)
tdSql
.
execute
(
f
"use
{
self
.
dbname
}
"
)
# create stable
tdSql
.
execute
(
self
.
setsql
.
set_create_stable_sql
(
self
.
stbname
,
self
.
stable_column_dict
,
self
.
tag_dict
))
tdLog
.
debug
(
"Create stable {} successfully"
.
format
(
self
.
stbname
))
# insert data into child table
for
ctname
in
self
.
ctbname_list
:
tdSql
.
execute
(
f
"insert into
{
ctname
}
using
{
self
.
stbname
}
tags('
{
ctname
}
') values(now, 1.1, 1)"
)
tdSql
.
execute
(
f
"insert into
{
ctname
}
using
{
self
.
stbname
}
tags('
{
ctname
}
') values(now, 2.1, 2)"
)
# create common table
tdSql
.
execute
(
self
.
setsql
.
set_create_normaltable_sql
(
self
.
common_tbname
,
self
.
common_table_dict
))
tdLog
.
debug
(
"Create common table {} successfully"
.
format
(
self
.
common_tbname
))
# insert data into common table
tdSql
.
execute
(
f
"insert into
{
self
.
common_tbname
}
values(now, 1.1, 1)"
)
tdSql
.
execute
(
f
"insert into
{
self
.
common_tbname
}
values(now, 2.2, 2)"
)
tdLog
.
debug
(
"Finish to prepare the data"
)
def
create_user
(
self
):
"""Create the user for test
"""
tdSql
.
execute
(
f
'create user
{
self
.
username
}
pass "
{
self
.
password
}
"'
)
tdLog
.
debug
(
"sql:"
+
f
'create user
{
self
.
username
}
pass "
{
self
.
password
}
" successfully'
)
def
grant_privilege
(
self
,
username
,
privilege
,
table
,
tag_condition
=
None
):
"""Add the privilege for the user
"""
try
:
if
tag_condition
:
tdSql
.
execute
(
f
'grant
{
privilege
}
on
{
self
.
dbname
}
.
{
table
}
with
{
tag_condition
}
to
{
username
}
'
)
else
:
tdSql
.
execute
(
f
'grant
{
privilege
}
on
{
self
.
dbname
}
.
{
table
}
to
{
username
}
'
)
time
.
sleep
(
2
)
tdLog
.
debug
(
"Grant {} privilege on {}.{} with condition {} to {} successfully"
.
format
(
privilege
,
self
.
dbname
,
table
,
tag_condition
,
username
))
except
Exception
as
ex
:
tdLog
.
exit
(
ex
)
def
remove_privilege
(
self
,
username
,
privilege
,
table
,
tag_condition
=
None
):
"""Remove the privilege for the user
"""
try
:
if
tag_condition
:
tdSql
.
execute
(
f
'revoke
{
privilege
}
on
{
self
.
dbname
}
.
{
table
}
with
{
tag_condition
}
from
{
username
}
'
)
else
:
tdSql
.
execute
(
f
'revoke
{
privilege
}
on
{
self
.
dbname
}
.
{
table
}
from
{
username
}
'
)
tdLog
.
debug
(
"Revoke {} privilege on {}.{} with condition {} from {} successfully"
.
format
(
privilege
,
self
.
dbname
,
table
,
tag_condition
,
username
))
except
Exception
as
ex
:
tdLog
.
exit
(
ex
)
def
run
(
self
):
self
.
create_user
()
# prepare the test data
self
.
prepare_data
()
for
case_name
in
self
.
cases
.
keys
():
tdLog
.
debug
(
"Execute the case {} with params {}"
.
format
(
case_name
,
str
(
self
.
cases
[
case_name
])))
# grant privilege for user test if case need
if
self
.
cases
[
case_name
][
"db_privilege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"db_privilege"
],
"*"
)
if
self
.
cases
[
case_name
][
"stable_priviege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"stable_priviege"
],
self
.
stbname
)
if
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
]
!=
"none"
and
self
.
cases
[
case_name
][
"child_table_ct2_privilege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
],
self
.
stbname
,
"ctbname='ct1' or ctbname='ct2'"
)
elif
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
],
self
.
stbname
,
"ctbname='ct1'"
)
elif
self
.
cases
[
case_name
][
"child_table_ct2_privilege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"child_table_ct2_privilege"
],
self
.
stbname
,
"ctbname='ct2'"
)
if
self
.
cases
[
case_name
][
"table_tb_privilege"
]
!=
"none"
:
self
.
grant_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"table_tb_privilege"
],
self
.
common_tbname
)
# connect db with user test
testconn
=
taos
.
connect
(
user
=
self
.
username
,
password
=
self
.
password
)
if
case_name
!=
"test_db_table_both_no_permission"
:
testconn
.
execute
(
"use %s;"
%
self
.
dbname
)
# check privilege of user test from ins_user_privileges table
res
=
testconn
.
query
(
"select * from information_schema.ins_user_privileges;"
)
tdLog
.
debug
(
"Current information_schema.ins_user_privileges values: {}"
.
format
(
res
.
fetch_all
()))
# check privilege of user test by executing sql query
for
index
in
range
(
len
(
self
.
cases
[
case_name
][
"sql"
])):
tdLog
.
debug
(
"Execute sql: {}"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
]))
try
:
# for write privilege
if
"insert "
in
self
.
cases
[
case_name
][
"sql"
][
index
]:
testconn
.
execute
(
self
.
cases
[
case_name
][
"sql"
][
index
])
# check the expected result
if
self
.
cases
[
case_name
][
"res"
][
index
]:
tdLog
.
debug
(
"Write data with sql {} successfully"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
]))
# for read privilege
elif
"select "
in
self
.
cases
[
case_name
][
"sql"
][
index
]:
res
=
testconn
.
query
(
self
.
cases
[
case_name
][
"sql"
][
index
])
data
=
res
.
fetch_all
()
tdLog
.
debug
(
"query result: {}"
.
format
(
data
))
# check query results by cases
if
case_name
in
[
"test_db_no_permission_childtable_read"
,
"test_db_write_childtable_read"
]
and
self
.
cases
[
case_name
][
"sql"
][
index
]
==
"select * from ct2;"
:
if
not
self
.
cases
[
case_name
][
"res"
][
index
]:
if
0
==
len
(
data
):
tdLog
.
debug
(
"Query with sql {} successfully as expected with empty result"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
]))
continue
else
:
tdLog
.
exit
(
"Query with sql {} failed with result {}"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
],
data
))
# check the expected result
if
self
.
cases
[
case_name
][
"res"
][
index
]:
if
len
(
data
)
>
0
:
tdLog
.
debug
(
"Query with sql {} successfully"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
]))
else
:
tdLog
.
exit
(
"Query with sql {} failed with result {}"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
],
data
))
else
:
tdLog
.
exit
(
"Execute query sql {} successfully, but expected failed"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
]))
except
BaseException
as
ex
:
# check the expect false result
if
not
self
.
cases
[
case_name
][
"res"
][
index
]:
tdLog
.
debug
(
"Execute sql {} failed with {} as expected"
.
format
(
self
.
cases
[
case_name
][
"sql"
][
index
],
str
(
ex
)))
continue
# unexpected exception
else
:
tdLog
.
exit
(
ex
)
# remove the privilege
if
self
.
cases
[
case_name
][
"db_privilege"
]
!=
"none"
:
self
.
remove_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"db_privilege"
],
"*"
)
if
self
.
cases
[
case_name
][
"stable_priviege"
]
!=
"none"
:
self
.
remove_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"stable_priviege"
],
self
.
stbname
)
if
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
]
!=
"none"
:
self
.
remove_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"child_table_ct1_privilege"
],
self
.
stbname
,
"ctbname='ct1'"
)
if
self
.
cases
[
case_name
][
"child_table_ct2_privilege"
]
!=
"none"
:
self
.
remove_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"child_table_ct2_privilege"
],
self
.
stbname
,
"ctbname='ct2'"
)
if
self
.
cases
[
case_name
][
"table_tb_privilege"
]
!=
"none"
:
self
.
remove_privilege
(
self
.
username
,
self
.
cases
[
case_name
][
"table_tb_privilege"
],
self
.
common_tbname
)
# close the connection of user test
testconn
.
close
()
def
stop
(
self
):
# remove the user
tdSql
.
execute
(
f
'drop user
{
self
.
username
}
'
)
# close the connection
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录