Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f66b1e77
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
未验证
提交
f66b1e77
编写于
6月 25, 2023
作者:
D
dapan1121
提交者:
GitHub
6月 25, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #21824 from taosdata/fix/TS-3573
fix: table level privilege for query issue
上级
b607a782
890030e8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
3 deletion
+21
-3
source/libs/parser/src/parAuthenticator.c
source/libs/parser/src/parAuthenticator.c
+21
-3
未找到文件。
source/libs/parser/src/parAuthenticator.c
浏览文件 @
f66b1e77
...
@@ -28,6 +28,10 @@ typedef struct SSelectAuthCxt {
...
@@ -28,6 +28,10 @@ typedef struct SSelectAuthCxt {
SSelectStmt
*
pSelect
;
SSelectStmt
*
pSelect
;
}
SSelectAuthCxt
;
}
SSelectAuthCxt
;
typedef
struct
SAuthRewriteCxt
{
STableNode
*
pTarget
;
}
SAuthRewriteCxt
;
static
int32_t
authQuery
(
SAuthCxt
*
pCxt
,
SNode
*
pStmt
);
static
int32_t
authQuery
(
SAuthCxt
*
pCxt
,
SNode
*
pStmt
);
static
void
setUserAuthInfo
(
SParseContext
*
pCxt
,
const
char
*
pDbName
,
const
char
*
pTabName
,
AUTH_TYPE
type
,
static
void
setUserAuthInfo
(
SParseContext
*
pCxt
,
const
char
*
pDbName
,
const
char
*
pTabName
,
AUTH_TYPE
type
,
...
@@ -90,12 +94,26 @@ static int32_t mergeStableTagCond(SNode** pWhere, SNode* pTagCond) {
...
@@ -90,12 +94,26 @@ static int32_t mergeStableTagCond(SNode** pWhere, SNode* pTagCond) {
return
code
;
return
code
;
}
}
static
int32_t
appendStableTagCond
(
SNode
**
pWhere
,
SNode
*
pTagCond
)
{
EDealRes
rewriteAuthTable
(
SNode
*
pNode
,
void
*
pContext
)
{
if
(
QUERY_NODE_COLUMN
==
nodeType
(
pNode
))
{
SColumnNode
*
pCol
=
(
SColumnNode
*
)
pNode
;
SAuthRewriteCxt
*
pCxt
=
(
SAuthRewriteCxt
*
)
pContext
;
strcpy
(
pCol
->
tableName
,
pCxt
->
pTarget
->
tableName
);
strcpy
(
pCol
->
tableAlias
,
pCxt
->
pTarget
->
tableAlias
);
}
return
DEAL_RES_CONTINUE
;
}
static
int32_t
rewriteAppendStableTagCond
(
SNode
**
pWhere
,
SNode
*
pTagCond
,
STableNode
*
pTable
)
{
SNode
*
pTagCondCopy
=
nodesCloneNode
(
pTagCond
);
SNode
*
pTagCondCopy
=
nodesCloneNode
(
pTagCond
);
if
(
NULL
==
pTagCondCopy
)
{
if
(
NULL
==
pTagCondCopy
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
SAuthRewriteCxt
cxt
=
{.
pTarget
=
pTable
};
nodesWalkExpr
(
pTagCondCopy
,
rewriteAuthTable
,
&
cxt
);
if
(
NULL
==
*
pWhere
)
{
if
(
NULL
==
*
pWhere
)
{
*
pWhere
=
pTagCondCopy
;
*
pWhere
=
pTagCondCopy
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -117,7 +135,7 @@ static EDealRes authSelectImpl(SNode* pNode, void* pContext) {
...
@@ -117,7 +135,7 @@ static EDealRes authSelectImpl(SNode* pNode, void* pContext) {
STableNode
*
pTable
=
(
STableNode
*
)
pNode
;
STableNode
*
pTable
=
(
STableNode
*
)
pNode
;
pAuthCxt
->
errCode
=
checkAuth
(
pAuthCxt
,
pTable
->
dbName
,
pTable
->
tableName
,
AUTH_TYPE_READ
,
&
pTagCond
);
pAuthCxt
->
errCode
=
checkAuth
(
pAuthCxt
,
pTable
->
dbName
,
pTable
->
tableName
,
AUTH_TYPE_READ
,
&
pTagCond
);
if
(
TSDB_CODE_SUCCESS
==
pAuthCxt
->
errCode
&&
NULL
!=
pTagCond
)
{
if
(
TSDB_CODE_SUCCESS
==
pAuthCxt
->
errCode
&&
NULL
!=
pTagCond
)
{
pAuthCxt
->
errCode
=
appendStableTagCond
(
&
pCxt
->
pSelect
->
pWhere
,
pTagCond
);
pAuthCxt
->
errCode
=
rewriteAppendStableTagCond
(
&
pCxt
->
pSelect
->
pWhere
,
pTagCond
,
pTable
);
}
}
return
TSDB_CODE_SUCCESS
==
pAuthCxt
->
errCode
?
DEAL_RES_CONTINUE
:
DEAL_RES_ERROR
;
return
TSDB_CODE_SUCCESS
==
pAuthCxt
->
errCode
?
DEAL_RES_CONTINUE
:
DEAL_RES_ERROR
;
}
else
if
(
QUERY_NODE_TEMP_TABLE
==
nodeType
(
pNode
))
{
}
else
if
(
QUERY_NODE_TEMP_TABLE
==
nodeType
(
pNode
))
{
...
@@ -152,7 +170,7 @@ static int32_t authDelete(SAuthCxt* pCxt, SDeleteStmt* pDelete) {
...
@@ -152,7 +170,7 @@ static int32_t authDelete(SAuthCxt* pCxt, SDeleteStmt* pDelete) {
STableNode
*
pTable
=
(
STableNode
*
)
pDelete
->
pFromTable
;
STableNode
*
pTable
=
(
STableNode
*
)
pDelete
->
pFromTable
;
int32_t
code
=
checkAuth
(
pCxt
,
pTable
->
dbName
,
pTable
->
tableName
,
AUTH_TYPE_WRITE
,
&
pTagCond
);
int32_t
code
=
checkAuth
(
pCxt
,
pTable
->
dbName
,
pTable
->
tableName
,
AUTH_TYPE_WRITE
,
&
pTagCond
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
NULL
!=
pTagCond
)
{
if
(
TSDB_CODE_SUCCESS
==
code
&&
NULL
!=
pTagCond
)
{
code
=
appendStableTagCond
(
&
pDelete
->
pWhere
,
pTagCond
);
code
=
rewriteAppendStableTagCond
(
&
pDelete
->
pWhere
,
pTagCond
,
pTable
);
}
}
return
code
;
return
code
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录