Merge branch '3.0' of https://github.com/taosdata/TDengine into enh/TD-29367-3.0
This commit is contained in:
commit
a539d1a3ca
|
@ -12,7 +12,7 @@ TDengine is configured by default with only one root user, who has the highest p
|
||||||
Only the root user can perform the operation of creating users, with the syntax as follows.
|
Only the root user can perform the operation of creating users, with the syntax as follows.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create user user_name pass'password' [sysinfo {1|0}]
|
create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
||||||
```
|
```
|
||||||
|
|
||||||
The parameters are explained as follows.
|
The parameters are explained as follows.
|
||||||
|
@ -20,6 +20,7 @@ The parameters are explained as follows.
|
||||||
- user_name: Up to 23 B long.
|
- user_name: Up to 23 B long.
|
||||||
- password: Up to 128 B long, valid characters include letters and numbers as well as special characters other than single and double quotes, apostrophes, backslashes, and spaces, and it cannot be empty.
|
- password: Up to 128 B long, valid characters include letters and numbers as well as special characters other than single and double quotes, apostrophes, backslashes, and spaces, and it cannot be empty.
|
||||||
- sysinfo: Whether the user can view system information. 1 means they can view it, 0 means they cannot. System information includes server configuration information, various node information such as dnode, query node (qnode), etc., as well as storage-related information, etc. The default is to view system information.
|
- sysinfo: Whether the user can view system information. 1 means they can view it, 0 means they cannot. System information includes server configuration information, various node information such as dnode, query node (qnode), etc., as well as storage-related information, etc. The default is to view system information.
|
||||||
|
- createdb: Whether the user can create databases. 1 means they can create databases, 0 means they cannot. The default value is 0. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||||
|
|
||||||
The following SQL can create a user named test with the password 123456 who can view system information.
|
The following SQL can create a user named test with the password 123456 who can view system information.
|
||||||
|
|
||||||
|
@ -51,6 +52,7 @@ alter_user_clause: {
|
||||||
pass 'literal'
|
pass 'literal'
|
||||||
| enable value
|
| enable value
|
||||||
| sysinfo value
|
| sysinfo value
|
||||||
|
| createdb value
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -59,6 +61,7 @@ The parameters are explained as follows.
|
||||||
- pass: Modify the user's password.
|
- pass: Modify the user's password.
|
||||||
- enable: Whether to enable the user. 1 means to enable this user, 0 means to disable this user.
|
- enable: Whether to enable the user. 1 means to enable this user, 0 means to disable this user.
|
||||||
- sysinfo: Whether the user can view system information. 1 means they can view system information, 0 means they cannot.
|
- sysinfo: Whether the user can view system information. 1 means they can view system information, 0 means they cannot.
|
||||||
|
- createdb: Whether the user can create databases. 1 means they can create databases, 0 means they cannot. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||||
|
|
||||||
The following SQL disables the user test.
|
The following SQL disables the user test.
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ User and permission management is a feature of TDengine Enterprise Edition. This
|
||||||
## Create User
|
## Create User
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE USER user_name PASS 'password' [SYSINFO {1|0}];
|
CREATE USER user_name PASS 'password' [SYSINFO {1|0}] [CREATEDB {1|0}];
|
||||||
```
|
```
|
||||||
|
|
||||||
The username can be up to 23 bytes long.
|
The username can be up to 23 bytes long.
|
||||||
|
@ -17,6 +17,8 @@ The password can be up to 31 bytes long. The password can include letters, numbe
|
||||||
|
|
||||||
`SYSINFO` indicates whether the user can view system information. `1` means they can view, `0` means they have no permission to view. System information includes service configuration, dnode, vnode, storage, etc. The default value is `1`.
|
`SYSINFO` indicates whether the user can view system information. `1` means they can view, `0` means they have no permission to view. System information includes service configuration, dnode, vnode, storage, etc. The default value is `1`.
|
||||||
|
|
||||||
|
`CREATEDB` indicates whether the user can create databases. `1` means they can create databases, `0` means they have no permission to create databases. The default value is `0`. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||||
|
|
||||||
In the example below, we create a user with the password `123456` who can view system information.
|
In the example below, we create a user with the password `123456` who can view system information.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -76,7 +78,7 @@ alter_user_clause: {
|
||||||
- PASS: Change the password, followed by the new password
|
- PASS: Change the password, followed by the new password
|
||||||
- ENABLE: Enable or disable the user, `1` means enable, `0` means disable
|
- ENABLE: Enable or disable the user, `1` means enable, `0` means disable
|
||||||
- SYSINFO: Allow or prohibit viewing system information, `1` means allow, `0` means prohibit
|
- SYSINFO: Allow or prohibit viewing system information, `1` means allow, `0` means prohibit
|
||||||
- CREATEDB: Allow or prohibit creating databases, `1` means allow, `0` means prohibit
|
- CREATEDB: Allow or prohibit creating databases, `1` means allow, `0` means prohibit. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||||
|
|
||||||
The following example disables the user named `test`:
|
The following example disables the user named `test`:
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,14 @@ TDengine 默认仅配置了一个 root 用户,该用户拥有最高权限。TD
|
||||||
|
|
||||||
创建用户的操作只能由 root 用户进行,语法如下。
|
创建用户的操作只能由 root 用户进行,语法如下。
|
||||||
```sql
|
```sql
|
||||||
create user user_name pass'password' [sysinfo {1|0}]
|
create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
||||||
```
|
```
|
||||||
|
|
||||||
相关参数说明如下。
|
相关参数说明如下。
|
||||||
- user_name:最长为 23 B。
|
- user_name:最长为 23 B。
|
||||||
- password:最长为 128 B,合法字符包括字母和数字以及单双引号、撇号、反斜杠和空格以外的特殊字符,且不可以为空。
|
- password:最长为 128 B,合法字符包括字母和数字以及单双引号、撇号、反斜杠和空格以外的特殊字符,且不可以为空。
|
||||||
- sysinfo :用户是否可以查看系统信息。1 表示可以查看,0 表示不可以查看。系统信息包括服务端配置信息、服务端各种节点信息,如 dnode、查询节点(qnode)等,以及与存储相关的信息等。默认为可以查看系统信息。
|
- sysinfo :用户是否可以查看系统信息。1 表示可以查看,0 表示不可以查看。系统信息包括服务端配置信息、服务端各种节点信息,如 dnode、查询节点(qnode)等,以及与存储相关的信息等。默认为可以查看系统信息。
|
||||||
|
- createdb:用户是否可以创建数据库。1 表示可以创建,0 表示不可以创建。缺省值为 0。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||||
|
|
||||||
如下 SQL 可以创建密码为 123456 且可以查看系统信息的用户 test。
|
如下 SQL 可以创建密码为 123456 且可以查看系统信息的用户 test。
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@ alter_user_clause: {
|
||||||
pass 'literal'
|
pass 'literal'
|
||||||
| enable value
|
| enable value
|
||||||
| sysinfo value
|
| sysinfo value
|
||||||
|
| createdb value
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -54,6 +56,7 @@ alter_user_clause: {
|
||||||
- pass:修改用户密码。
|
- pass:修改用户密码。
|
||||||
- enable:是否启用用户。1 表示启用此用户,0 表示禁用此用户。
|
- enable:是否启用用户。1 表示启用此用户,0 表示禁用此用户。
|
||||||
- sysinfo :用户是否可查看系统信息。1 表示可以查看系统信息,0 表示不可以查看系统信息
|
- sysinfo :用户是否可查看系统信息。1 表示可以查看系统信息,0 表示不可以查看系统信息
|
||||||
|
- createdb:用户是否可创建数据库。1 表示可以创建数据库,0 表示不可以创建数据库。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||||
|
|
||||||
如下 SQL 禁用 test 用户。
|
如下 SQL 禁用 test 用户。
|
||||||
```sql
|
```sql
|
||||||
|
|
|
@ -9,7 +9,7 @@ description: 本节讲述基本的用户管理功能
|
||||||
## 创建用户
|
## 创建用户
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE USER user_name PASS 'password' [SYSINFO {1|0}];
|
CREATE USER user_name PASS 'password' [SYSINFO {1|0}] [CREATEDB {1|0}];
|
||||||
```
|
```
|
||||||
|
|
||||||
用户名最长不超过 23 个字节。
|
用户名最长不超过 23 个字节。
|
||||||
|
@ -18,6 +18,8 @@ CREATE USER user_name PASS 'password' [SYSINFO {1|0}];
|
||||||
|
|
||||||
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
||||||
|
|
||||||
|
`CREATEDB` 表示该用户是否能够创建数据库。`1` 表示可以创建,`0` 表示无权创建。缺省值为 `0`。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||||
|
|
||||||
在下面的示例中,我们创建一个密码为 `123456` 且可以查看系统信息的用户。
|
在下面的示例中,我们创建一个密码为 `123456` 且可以查看系统信息的用户。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -77,7 +79,7 @@ alter_user_clause: {
|
||||||
- PASS: 修改密码,后跟新密码
|
- PASS: 修改密码,后跟新密码
|
||||||
- ENABLE: 启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
- ENABLE: 启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
||||||
- SYSINFO: 允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
- SYSINFO: 允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
||||||
- CREATEDB: 允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止
|
- CREATEDB: 允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||||
|
|
||||||
下面的示例禁用了名为 `test` 的用户:
|
下面的示例禁用了名为 `test` 的用户:
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "mndTrans.h"
|
|
||||||
#include "mndDb.h"
|
#include "mndDb.h"
|
||||||
#include "mndPrivilege.h"
|
#include "mndPrivilege.h"
|
||||||
#include "mndShow.h"
|
#include "mndShow.h"
|
||||||
#include "mndStb.h"
|
#include "mndStb.h"
|
||||||
#include "mndSubscribe.h"
|
#include "mndSubscribe.h"
|
||||||
#include "mndSync.h"
|
#include "mndSync.h"
|
||||||
|
#include "mndTrans.h"
|
||||||
#include "mndUser.h"
|
#include "mndUser.h"
|
||||||
|
|
||||||
#define TRANS_VER1_NUMBER 1
|
#define TRANS_VER1_NUMBER 1
|
||||||
|
@ -216,7 +216,7 @@ SSdbRaw *mndTransEncode(STrans *pTrans) {
|
||||||
SDB_SET_RESERVE(pRaw, dataPos, TRANS_RESERVE_SIZE, _OVER)
|
SDB_SET_RESERVE(pRaw, dataPos, TRANS_RESERVE_SIZE, _OVER)
|
||||||
SDB_SET_DATALEN(pRaw, dataPos, _OVER)
|
SDB_SET_DATALEN(pRaw, dataPos, _OVER)
|
||||||
|
|
||||||
terrno = 0;
|
terrno = 0;
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
if (terrno != 0) {
|
if (terrno != 0) {
|
||||||
|
@ -287,8 +287,8 @@ _OVER:
|
||||||
|
|
||||||
SSdbRow *mndTransDecode(SSdbRaw *pRaw) {
|
SSdbRow *mndTransDecode(SSdbRaw *pRaw) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
SSdbRow *pRow = NULL;
|
SSdbRow *pRow = NULL;
|
||||||
STrans *pTrans = NULL;
|
STrans *pTrans = NULL;
|
||||||
char *pData = NULL;
|
char *pData = NULL;
|
||||||
|
@ -890,7 +890,7 @@ static bool mndCheckTransConflict(SMnode *pMnode, STrans *pNew) {
|
||||||
if (pNew->conflict == TRN_CONFLICT_ARBGROUP) {
|
if (pNew->conflict == TRN_CONFLICT_ARBGROUP) {
|
||||||
if (pTrans->conflict == TRN_CONFLICT_GLOBAL) conflict = true;
|
if (pTrans->conflict == TRN_CONFLICT_GLOBAL) conflict = true;
|
||||||
if (pTrans->conflict == TRN_CONFLICT_ARBGROUP) {
|
if (pTrans->conflict == TRN_CONFLICT_ARBGROUP) {
|
||||||
void* pGidIter = taosHashIterate(pNew->arbGroupIds, NULL);
|
void *pGidIter = taosHashIterate(pNew->arbGroupIds, NULL);
|
||||||
while (pGidIter != NULL) {
|
while (pGidIter != NULL) {
|
||||||
int32_t groupId = *(int32_t *)pGidIter;
|
int32_t groupId = *(int32_t *)pGidIter;
|
||||||
if (taosHashGet(pTrans->arbGroupIds, &groupId, sizeof(int32_t)) != NULL) {
|
if (taosHashGet(pTrans->arbGroupIds, &groupId, sizeof(int32_t)) != NULL) {
|
||||||
|
@ -1033,7 +1033,7 @@ static int32_t mndTransCheckCommitActions(SMnode *pMnode, STrans *pTrans) {
|
||||||
int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
|
int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
if (pTrans == NULL) {
|
if (pTrans == NULL) {
|
||||||
return TSDB_CODE_INVALID_PARA;
|
return TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_CHECK_RETURN(mndTransCheckConflict(pMnode, pTrans));
|
TAOS_CHECK_RETURN(mndTransCheckConflict(pMnode, pTrans));
|
||||||
|
@ -1305,6 +1305,14 @@ static int32_t mndTransWriteSingleLog(SMnode *pMnode, STrans *pTrans, STransActi
|
||||||
TAOS_RETURN(TSDB_CODE_MND_TRANS_CTX_SWITCH);
|
TAOS_RETURN(TSDB_CODE_MND_TRANS_CTX_SWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pAction->pRaw->type >= SDB_MAX) {
|
||||||
|
pAction->rawWritten = true;
|
||||||
|
pAction->errCode = 0;
|
||||||
|
mndSetTransLastAction(pTrans, pAction);
|
||||||
|
mInfo("skip sdb raw type:%d since it is not supported", pAction->pRaw->type);
|
||||||
|
TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t code = sdbWriteWithoutFree(pMnode->pSdb, pAction->pRaw);
|
int32_t code = sdbWriteWithoutFree(pMnode->pSdb, pAction->pRaw);
|
||||||
if (code == 0 || terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) {
|
if (code == 0 || terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) {
|
||||||
pAction->rawWritten = true;
|
pAction->rawWritten = true;
|
||||||
|
@ -1348,10 +1356,10 @@ static int32_t mndTransSendSingleMsg(SMnode *pMnode, STrans *pTrans, STransActio
|
||||||
|
|
||||||
char detail[1024] = {0};
|
char detail[1024] = {0};
|
||||||
int32_t len = tsnprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d", TMSG_INFO(pAction->msgType),
|
int32_t len = tsnprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d", TMSG_INFO(pAction->msgType),
|
||||||
pAction->epSet.numOfEps, pAction->epSet.inUse);
|
pAction->epSet.numOfEps, pAction->epSet.inUse);
|
||||||
for (int32_t i = 0; i < pAction->epSet.numOfEps; ++i) {
|
for (int32_t i = 0; i < pAction->epSet.numOfEps; ++i) {
|
||||||
len += tsnprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, pAction->epSet.eps[i].fqdn,
|
len += tsnprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, pAction->epSet.eps[i].fqdn,
|
||||||
pAction->epSet.eps[i].port);
|
pAction->epSet.eps[i].port);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t code = tmsgSendReq(&pAction->epSet, &rpcMsg);
|
int32_t code = tmsgSendReq(&pAction->epSet, &rpcMsg);
|
||||||
|
@ -1454,9 +1462,9 @@ static int32_t mndTransExecuteActions(SMnode *pMnode, STrans *pTrans, SArray *pA
|
||||||
|
|
||||||
for (int32_t action = 0; action < numOfActions; ++action) {
|
for (int32_t action = 0; action < numOfActions; ++action) {
|
||||||
STransAction *pAction = taosArrayGet(pArray, action);
|
STransAction *pAction = taosArrayGet(pArray, action);
|
||||||
mDebug("trans:%d, %s:%d Sent:%d, Received:%d, errCode:0x%x, acceptableCode:0x%x, retryCode:0x%x",
|
mDebug("trans:%d, %s:%d Sent:%d, Received:%d, errCode:0x%x, acceptableCode:0x%x, retryCode:0x%x", pTrans->id,
|
||||||
pTrans->id, mndTransStr(pAction->stage), pAction->id, pAction->msgSent, pAction->msgReceived,
|
mndTransStr(pAction->stage), pAction->id, pAction->msgSent, pAction->msgReceived, pAction->errCode,
|
||||||
pAction->errCode, pAction->acceptableCode, pAction->retryCode);
|
pAction->acceptableCode, pAction->retryCode);
|
||||||
if (pAction->msgSent) {
|
if (pAction->msgSent) {
|
||||||
if (pAction->msgReceived) {
|
if (pAction->msgReceived) {
|
||||||
if (pAction->errCode != 0 && pAction->errCode != pAction->acceptableCode) {
|
if (pAction->errCode != 0 && pAction->errCode != pAction->acceptableCode) {
|
||||||
|
@ -2038,11 +2046,11 @@ static int32_t mndRetrieveTrans(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl
|
||||||
char lastInfo[TSDB_TRANS_ERROR_LEN + VARSTR_HEADER_SIZE] = {0};
|
char lastInfo[TSDB_TRANS_ERROR_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
char detail[TSDB_TRANS_ERROR_LEN + 1] = {0};
|
char detail[TSDB_TRANS_ERROR_LEN + 1] = {0};
|
||||||
int32_t len = tsnprintf(detail, sizeof(detail), "action:%d code:0x%x(%s) ", pTrans->lastAction,
|
int32_t len = tsnprintf(detail, sizeof(detail), "action:%d code:0x%x(%s) ", pTrans->lastAction,
|
||||||
pTrans->lastErrorNo & 0xFFFF, tstrerror(pTrans->lastErrorNo));
|
pTrans->lastErrorNo & 0xFFFF, tstrerror(pTrans->lastErrorNo));
|
||||||
SEpSet epset = pTrans->lastEpset;
|
SEpSet epset = pTrans->lastEpset;
|
||||||
if (epset.numOfEps > 0) {
|
if (epset.numOfEps > 0) {
|
||||||
len += tsnprintf(detail + len, sizeof(detail) - len, "msgType:%s numOfEps:%d inUse:%d ",
|
len += tsnprintf(detail + len, sizeof(detail) - len, "msgType:%s numOfEps:%d inUse:%d ",
|
||||||
TMSG_INFO(pTrans->lastMsgType), epset.numOfEps, epset.inUse);
|
TMSG_INFO(pTrans->lastMsgType), epset.numOfEps, epset.inUse);
|
||||||
for (int32_t i = 0; i < pTrans->lastEpset.numOfEps; ++i) {
|
for (int32_t i = 0; i < pTrans->lastEpset.numOfEps; ++i) {
|
||||||
len += tsnprintf(detail + len, sizeof(detail) - len, "ep:%d-%s:%u ", i, epset.eps[i].fqdn, epset.eps[i].port);
|
len += tsnprintf(detail + len, sizeof(detail) - len, "ep:%d-%s:%u ", i, epset.eps[i].fqdn, epset.eps[i].port);
|
||||||
}
|
}
|
||||||
|
|
|
@ -388,6 +388,11 @@ static int32_t sdbReadFileImp(SSdb *pSdb) {
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pRaw->type >= SDB_MAX) {
|
||||||
|
mInfo("skip sdb raw type:%d since it is not supported", pRaw->type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
code = sdbWriteWithoutFree(pSdb, pRaw);
|
code = sdbWriteWithoutFree(pSdb, pRaw);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
mError("failed to read sdb file:%s since %s", file, terrstr());
|
mError("failed to read sdb file:%s since %s", file, terrstr());
|
||||||
|
|
Loading…
Reference in New Issue