Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
daaf4871
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
daaf4871
编写于
3月 28, 2023
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: table level privilege syntax
上级
6c151562
变更
9
展开全部
隐藏空白更改
内联
并排
Showing
9 changed file
with
3451 addition
and
3351 deletion
+3451
-3351
include/common/tmsg.h
include/common/tmsg.h
+5
-3
include/common/ttokendef.h
include/common/ttokendef.h
+49
-49
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+2
-0
source/common/src/tmsg.c
source/common/src/tmsg.c
+23
-2
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+9
-2
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+10
-6
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+16
-6
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+10
-1
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+3327
-3282
未找到文件。
include/common/tmsg.h
浏览文件 @
daaf4871
...
...
@@ -676,6 +676,8 @@ typedef struct {
char
user
[
TSDB_USER_LEN
];
char
pass
[
TSDB_USET_PASSWORD_LEN
];
char
objname
[
TSDB_DB_FNAME_LEN
];
// db or topic
char
tabName
[
TSDB_TABLE_NAME_LEN
];
char
*
tagCond
;
}
SAlterUserReq
;
int32_t
tSerializeSAlterUserReq
(
void
*
buf
,
int32_t
bufLen
,
SAlterUserReq
*
pReq
);
...
...
@@ -3187,9 +3189,9 @@ typedef struct {
SArray
*
blockTbName
;
SArray
*
blockSchema
;
// the following attributes are extended from SMqDataRsp
int32_t
createTableNum
;
SArray
*
createTableLen
;
SArray
*
createTableReq
;
int32_t
createTableNum
;
SArray
*
createTableLen
;
SArray
*
createTableReq
;
}
STaosxRsp
;
int32_t
tEncodeSTaosxRsp
(
SEncoder
*
pEncoder
,
const
STaosxRsp
*
pRsp
);
...
...
include/common/ttokendef.h
浏览文件 @
daaf4871
...
...
@@ -63,55 +63,55 @@
#define TK_READ 45
#define TK_WRITE 46
#define TK_NK_DOT 47
#define TK_
DNODE
48
#define TK_
PORT
49
#define TK_
DNODES
50
#define TK_
NK_IPTOKEN
51
#define TK_
FORCE
52
#define TK_
LOCAL
53
#define TK_
QNODE
54
#define TK_
B
NODE 55
#define TK_
S
NODE 56
#define TK_
M
NODE 57
#define TK_
DATABASE
58
#define TK_
USE
59
#define TK_
FLUSH
60
#define TK_
TRIM
61
#define TK_
COMPACT
62
#define TK_
IF
63
#define TK_
NOT
64
#define TK_
EXISTS
65
#define TK_
BUFFER
66
#define TK_
CACHEMODEL
67
#define TK_CACHE
SIZE
68
#define TK_C
OMP
69
#define TK_
DURATION
70
#define TK_
NK_VARIABLE
71
#define TK_
MAXROWS
72
#define TK_M
IN
ROWS 73
#define TK_
KEEP
74
#define TK_
PAGES
75
#define TK_PAGES
IZE
76
#define TK_
TSDB_PAGESIZE
77
#define TK_
PRECISION
78
#define TK_
REPLICA
79
#define TK_
VGROUPS
80
#define TK_
SINGLE_STABLE
81
#define TK_
RETENTIONS
82
#define TK_
SCHEMALES
S 83
#define TK_
WAL_LEVEL
84
#define TK_WAL_
FSYNC_PERIOD
85
#define TK_WAL_
RETENTION_PERIOD
86
#define TK_WAL_RETENTION_
SIZE
87
#define TK_WAL_R
OLL_PERIOD
88
#define TK_WAL_
SEGMENT_SIZE
89
#define TK_
STT_TRIGGER
90
#define TK_
TABLE_PREFIX
91
#define TK_TABLE_
SUF
FIX 92
#define TK_
NK_COLON
93
#define TK_
MAX_SPEED
94
#define TK_
START
95
#define TK_
WITH
96
#define TK_
WITH
48
#define TK_
DNODE
49
#define TK_
PORT
50
#define TK_
DNODES
51
#define TK_
NK_IPTOKEN
52
#define TK_
FORCE
53
#define TK_
LOCAL
54
#define TK_
Q
NODE 55
#define TK_
B
NODE 56
#define TK_
S
NODE 57
#define TK_
MNODE
58
#define TK_
DATABASE
59
#define TK_
USE
60
#define TK_
FLUSH
61
#define TK_
TRIM
62
#define TK_
COMPACT
63
#define TK_
IF
64
#define TK_
NOT
65
#define TK_
EXISTS
66
#define TK_
BUFFER
67
#define TK_CACHE
MODEL
68
#define TK_C
ACHESIZE
69
#define TK_
COMP
70
#define TK_
DURATION
71
#define TK_
NK_VARIABLE
72
#define TK_M
AX
ROWS 73
#define TK_
MINROWS
74
#define TK_
KEEP
75
#define TK_PAGES
76
#define TK_
PAGESIZE
77
#define TK_
TSDB_PAGESIZE
78
#define TK_
PRECISION
79
#define TK_
REPLICA
80
#define TK_
VGROUPS
81
#define TK_
SINGLE_STABLE
82
#define TK_
RETENTION
S 83
#define TK_
SCHEMALESS
84
#define TK_WAL_
LEVEL
85
#define TK_WAL_
FSYNC_PERIOD
86
#define TK_WAL_RETENTION_
PERIOD
87
#define TK_WAL_R
ETENTION_SIZE
88
#define TK_WAL_
ROLL_PERIOD
89
#define TK_
WAL_SEGMENT_SIZE
90
#define TK_
STT_TRIGGER
91
#define TK_TABLE_
PRE
FIX 92
#define TK_
TABLE_SUFFIX
93
#define TK_
NK_COLON
94
#define TK_
MAX_SPEED
95
#define TK_
START
96
#define TK_TIMESTAMP 97
#define TK_END 98
#define TK_TABLE 99
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
daaf4871
...
...
@@ -456,7 +456,9 @@ typedef struct SGrantStmt {
ENodeType
type
;
char
userName
[
TSDB_USER_LEN
];
char
objName
[
TSDB_DB_NAME_LEN
];
// db or topic
char
tabName
[
TSDB_TABLE_NAME_LEN
];
int64_t
privileges
;
SNode
*
pTagCond
;
}
SGrantStmt
;
typedef
SGrantStmt
SRevokeStmt
;
...
...
source/common/src/tmsg.c
浏览文件 @
daaf4871
...
...
@@ -1150,7 +1150,7 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
if
(
tDecodeI64
(
&
decoder
,
&
vload
.
compStorage
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
vload
.
pointsWritten
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
&
vload
.
numOfCachedTables
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
(
int32_t
*
)
&
reserved
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
(
int32_t
*
)
&
reserved
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
reserved
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
reserved
)
<
0
)
return
-
1
;
if
(
taosArrayPush
(
pReq
->
pVloads
,
&
vload
)
==
NULL
)
{
...
...
@@ -1368,6 +1368,16 @@ int32_t tSerializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq)
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
user
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
pass
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
objname
)
<
0
)
return
-
1
;
int32_t
len
=
strlen
(
pReq
->
tabName
);
if
(
tEncodeI32
(
&
encoder
,
len
)
<
0
)
return
-
1
;
if
(
len
>
0
)
{
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
tabName
)
<
0
)
return
-
1
;
}
len
=
(
NULL
==
pReq
->
tagCond
?
0
:
strlen
(
pReq
->
tagCond
));
if
(
tEncodeI32
(
&
encoder
,
len
)
<
0
)
return
-
1
;
if
(
len
>
0
)
{
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
tagCond
)
<
0
)
return
-
1
;
}
tEndEncode
(
&
encoder
);
int32_t
tlen
=
encoder
.
pos
;
...
...
@@ -1387,6 +1397,17 @@ int32_t tDeserializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
user
)
<
0
)
return
-
1
;
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
pass
)
<
0
)
return
-
1
;
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
objname
)
<
0
)
return
-
1
;
if
(
!
tDecodeIsEnd
(
&
decoder
))
{
int32_t
len
=
0
;
if
(
tDecodeI32
(
&
decoder
,
&
len
)
<
0
)
return
-
1
;
if
(
len
>
0
)
{
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
tabName
)
<
0
)
return
-
1
;
}
if
(
tDecodeI32
(
&
decoder
,
&
len
)
<
0
)
return
-
1
;
if
(
len
>
0
)
{
if
(
tDecodeCStrAlloc
(
&
decoder
,
&
pReq
->
tagCond
)
<
0
)
return
-
1
;
}
}
tEndDecode
(
&
decoder
);
tDecoderClear
(
&
decoder
);
...
...
@@ -6824,7 +6845,7 @@ int32_t tDecodeSMqDataRsp(SDecoder *pDecoder, SMqDataRsp *pRsp) {
}
void
tDeleteSMqDataRsp
(
SMqDataRsp
*
pRsp
)
{
pRsp
->
blockDataLen
=
taosArrayDestroy
(
pRsp
->
blockDataLen
);
;
pRsp
->
blockDataLen
=
taosArrayDestroy
(
pRsp
->
blockDataLen
);
taosArrayDestroyP
(
pRsp
->
blockData
,
(
FDelete
)
taosMemoryFree
);
pRsp
->
blockData
=
NULL
;
taosArrayDestroyP
(
pRsp
->
blockSchema
,
(
FDelete
)
tDeleteSSchemaWrapper
);
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
daaf4871
...
...
@@ -82,6 +82,11 @@ typedef struct SAlterOption {
SNodeList
*
pList
;
}
SAlterOption
;
typedef
struct
STokenPair
{
SToken
first
;
SToken
second
;
}
STokenPair
;
extern
SToken
nil_token
;
void
initAstCreateContext
(
SParseContext
*
pParseCxt
,
SAstCreateContext
*
pCxt
);
...
...
@@ -227,8 +232,10 @@ SNode* createMergeVgroupStmt(SAstCreateContext* pCxt, const SToken* pVgId1, cons
SNode
*
createRedistributeVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
,
SNodeList
*
pDnodes
);
SNode
*
createSplitVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
);
SNode
*
createSyncdbStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
);
SNode
*
createGrantStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
SToken
*
pDbName
,
SToken
*
pUserName
);
SNode
*
createRevokeStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
SToken
*
pDbName
,
SToken
*
pUserName
);
SNode
*
createGrantStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
STokenPair
*
pPrivLevel
,
SToken
*
pUserName
,
SNode
*
pTagCond
);
SNode
*
createRevokeStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
STokenPair
*
pPrivLevel
,
SToken
*
pUserName
,
SNode
*
pTagCond
);
SNode
*
createDeleteStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pTable
,
SNode
*
pWhere
);
SNode
*
createInsertStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pTable
,
SNodeList
*
pCols
,
SNode
*
pQuery
);
...
...
source/libs/parser/inc/sql.y
浏览文件 @
daaf4871
...
...
@@ -94,8 +94,8 @@ sysinfo_opt(A) ::= .
sysinfo_opt(A) ::= SYSINFO NK_INTEGER(B). { A = taosStr2Int8(B.z, NULL, 10); }
/************************************************ grant/revoke ********************************************************/
cmd ::= GRANT privileges(A) ON priv_level(B)
TO user_name(C). { pCxt->pRootNode = createGrantStmt(pCxt, A, &B, &C
); }
cmd ::= REVOKE privileges(A) ON priv_level(B)
FROM user_name(C). { pCxt->pRootNode = createRevokeStmt(pCxt, A, &B, &C
); }
cmd ::= GRANT privileges(A) ON priv_level(B)
with_opt(D) TO user_name(C). { pCxt->pRootNode = createGrantStmt(pCxt, A, &B, &C, D
); }
cmd ::= REVOKE privileges(A) ON priv_level(B)
with_opt(D) FROM user_name(C). { pCxt->pRootNode = createRevokeStmt(pCxt, A, &B, &C, D
); }
%type privileges { int64_t }
%destructor privileges { }
...
...
@@ -113,11 +113,15 @@ priv_type_list(A) ::= priv_type_list(B) NK_COMMA priv_type(C).
priv_type(A) ::= READ. { A = PRIVILEGE_TYPE_READ; }
priv_type(A) ::= WRITE. { A = PRIVILEGE_TYPE_WRITE; }
%type priv_level { SToken }
%type priv_level { SToken
Pair
}
%destructor priv_level { }
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR. { A = B; }
priv_level(A) ::= db_name(B) NK_DOT NK_STAR. { A = B; }
priv_level(A) ::= topic_name(B). { A = B; }
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR(C). { A.first = B; A.second = C; }
priv_level(A) ::= db_name(B) NK_DOT NK_STAR(C). { A.first = B; A.second = C; }
priv_level(A) ::= db_name(B) NK_DOT table_name(C). { A.first = B; A.second = C; }
priv_level(A) ::= topic_name(B). { A.first = B; A.second = nil_token; }
with_opt(A) ::= . { A = NULL; }
with_opt(A) ::= WITH search_condition(B). { A = B; }
/************************************************ create/drop/alter dnode *********************************************/
cmd ::= CREATE DNODE dnode_endpoint(A). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
daaf4871
...
...
@@ -1961,29 +1961,39 @@ SNode* createSyncdbStmt(SAstCreateContext* pCxt, const SToken* pDbName) {
return
pStmt
;
}
SNode
*
createGrantStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
SToken
*
pDbName
,
SToken
*
pUserName
)
{
SNode
*
createGrantStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
STokenPair
*
pPrivLevel
,
SToken
*
pUserName
,
SNode
*
pTagCond
)
{
CHECK_PARSER_STATUS
(
pCxt
);
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
)
||
!
checkUserName
(
pCxt
,
pUserName
))
{
if
(
!
checkDbName
(
pCxt
,
&
pPrivLevel
->
first
,
false
)
||
!
checkUserName
(
pCxt
,
pUserName
))
{
return
NULL
;
}
SGrantStmt
*
pStmt
=
(
SGrantStmt
*
)
nodesMakeNode
(
QUERY_NODE_GRANT_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
privileges
=
privileges
;
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
objName
,
pDbName
);
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
objName
,
&
pPrivLevel
->
first
);
if
(
TK_NK_NIL
!=
pPrivLevel
->
second
.
type
&&
TK_NK_STAR
!=
pPrivLevel
->
second
.
type
)
{
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
tabName
,
&
pPrivLevel
->
second
);
}
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
userName
,
pUserName
);
pStmt
->
pTagCond
=
pTagCond
;
return
(
SNode
*
)
pStmt
;
}
SNode
*
createRevokeStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
SToken
*
pDbName
,
SToken
*
pUserName
)
{
SNode
*
createRevokeStmt
(
SAstCreateContext
*
pCxt
,
int64_t
privileges
,
STokenPair
*
pPrivLevel
,
SToken
*
pUserName
,
SNode
*
pTagCond
)
{
CHECK_PARSER_STATUS
(
pCxt
);
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
)
||
!
checkUserName
(
pCxt
,
pUserName
))
{
if
(
!
checkDbName
(
pCxt
,
&
pPrivLevel
->
first
,
false
)
||
!
checkUserName
(
pCxt
,
pUserName
))
{
return
NULL
;
}
SRevokeStmt
*
pStmt
=
(
SRevokeStmt
*
)
nodesMakeNode
(
QUERY_NODE_REVOKE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
privileges
=
privileges
;
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
objName
,
pDbName
);
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
objName
,
&
pPrivLevel
->
first
);
if
(
TK_NK_NIL
!=
pPrivLevel
->
second
.
type
&&
TK_NK_STAR
!=
pPrivLevel
->
second
.
type
)
{
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
tabName
,
&
pPrivLevel
->
second
);
}
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
userName
,
pUserName
);
pStmt
->
pTagCond
=
pTagCond
;
return
(
SNode
*
)
pStmt
;
}
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
daaf4871
...
...
@@ -6464,7 +6464,15 @@ static int32_t translateGrant(STranslateContext* pCxt, SGrantStmt* pStmt) {
}
strcpy
(
req
.
user
,
pStmt
->
userName
);
sprintf
(
req
.
objname
,
"%d.%s"
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
objName
);
return
buildCmdMsg
(
pCxt
,
TDMT_MND_ALTER_USER
,
(
FSerializeFunc
)
tSerializeSAlterUserReq
,
&
req
);
sprintf
(
req
.
tabName
,
"%s"
,
pStmt
->
tabName
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
NULL
!=
pStmt
->
pTagCond
)
{
code
=
nodesNodeToString
(
pStmt
->
pTagCond
,
false
,
&
req
.
tagCond
,
NULL
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildCmdMsg
(
pCxt
,
TDMT_MND_ALTER_USER
,
(
FSerializeFunc
)
tSerializeSAlterUserReq
,
&
req
);
}
return
code
;
}
static
int32_t
translateRevoke
(
STranslateContext
*
pCxt
,
SRevokeStmt
*
pStmt
)
{
...
...
@@ -6482,6 +6490,7 @@ static int32_t translateRevoke(STranslateContext* pCxt, SRevokeStmt* pStmt) {
}
strcpy
(
req
.
user
,
pStmt
->
userName
);
sprintf
(
req
.
objname
,
"%d.%s"
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
objName
);
sprintf
(
req
.
tabName
,
"%s"
,
pStmt
->
tabName
);
return
buildCmdMsg
(
pCxt
,
TDMT_MND_ALTER_USER
,
(
FSerializeFunc
)
tSerializeSAlterUserReq
,
&
req
);
}
...
...
source/libs/parser/src/sql.c
浏览文件 @
daaf4871
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录