Skip to content
Snippets Groups Projects
Unverified Commit e9413c8e authored by daviszhen's avatar daviszhen Committed by GitHub
Browse files

update multi account (#5587)

1, fix compound privilege;
2,add restriction for catalog;
3,add privilege check for PREPARE;
4,add coverage bvt cases for basic privilege;

Approved by: @aressu1985, @yingfeng, @fengttt
parent 28afb6e3
No related branches found
No related tags found
No related merge requests found
Showing
with 923 additions and 153 deletions
......@@ -27,3 +27,11 @@ pkg/catalog/test/
pkg/config/system_vars.go
pkg/config/system_vars_test.go
path_to_file
test/resources/into_outfile/outfile_float_2.csv
test/resources/into_outfile/outfile_integer_numbers_1.csv
test/resources/into_outfile/outfile_time_date_2.csv
test/resources/into_outfile_2/outfile_float_2.csv
test/resources/into_outfile_2/outfile_integer_numbers_1.csv
test/resources/into_outfile_2/outfile_time_date_2.csv
test/resources/json/export_1.csv
test/resources/json/export_2.csv
\ No newline at end of file
This diff is collapsed.
......@@ -3458,7 +3458,7 @@ func Test_determineDML(t *testing.T) {
}
var rows [][]interface{}
for _, entry := range priv.entries {
makeSql := func(entry privilegeEntry) {
pls, err := getPrivilegeLevelsOfObjectType(entry.objType)
convey.So(err, convey.ShouldBeNil)
for i, pl := range pls {
......@@ -3476,6 +3476,20 @@ func Test_determineDML(t *testing.T) {
}
}
}
for _, entry := range priv.entries {
if entry.peTyp == privilegeEntryTypeGeneral {
makeSql(entry)
} else if entry.peTyp == privilegeEntryTypeMulti {
for _, mi := range entry.mEntry.privs {
tempEntry := privilegeEntriesMap[mi.pt]
tempEntry.databaseName = mi.dbName
tempEntry.tableName = mi.tableName
tempEntry.peTyp = privilegeEntryTypeGeneral
tempEntry.mEntry = nil
makeSql(tempEntry)
}
}
}
sql := getSqlForInheritedRoleIdOfRoleId(0)
sql2result[sql] = newMrsForInheritedRoleIdOfRoleId([][]interface{}{})
......@@ -3536,7 +3550,7 @@ func Test_determineDML(t *testing.T) {
var rows [][]interface{}
roles := []int{0, 1}
for _, entry := range priv.entries {
makeSql := func(entry privilegeEntry) {
pls, err := getPrivilegeLevelsOfObjectType(entry.objType)
convey.So(err, convey.ShouldBeNil)
for _, pl := range pls {
......@@ -3555,6 +3569,21 @@ func Test_determineDML(t *testing.T) {
}
}
for _, entry := range priv.entries {
if entry.peTyp == privilegeEntryTypeGeneral {
makeSql(entry)
} else if entry.peTyp == privilegeEntryTypeMulti {
for _, mi := range entry.mEntry.privs {
tempEntry := privilegeEntriesMap[mi.pt]
tempEntry.databaseName = mi.dbName
tempEntry.tableName = mi.tableName
tempEntry.peTyp = privilegeEntryTypeGeneral
tempEntry.mEntry = nil
makeSql(tempEntry)
}
}
}
sql := getSqlForInheritedRoleIdOfRoleId(0)
sql2result[sql] = newMrsForInheritedRoleIdOfRoleId([][]interface{}{
{1, true},
......@@ -3613,7 +3642,7 @@ func Test_determineDML(t *testing.T) {
var rows [][]interface{}
roles := []int{0, 1, 2}
for _, entry := range priv.entries {
makeSql := func(entry privilegeEntry) {
pls, err := getPrivilegeLevelsOfObjectType(entry.objType)
convey.So(err, convey.ShouldBeNil)
for _, pl := range pls {
......@@ -3626,6 +3655,21 @@ func Test_determineDML(t *testing.T) {
}
}
for _, entry := range priv.entries {
if entry.peTyp == privilegeEntryTypeGeneral {
makeSql(entry)
} else if entry.peTyp == privilegeEntryTypeMulti {
for _, mi := range entry.mEntry.privs {
tempEntry := privilegeEntriesMap[mi.pt]
tempEntry.databaseName = mi.dbName
tempEntry.tableName = mi.tableName
tempEntry.peTyp = privilegeEntryTypeGeneral
tempEntry.mEntry = nil
makeSql(tempEntry)
}
}
}
sql := getSqlForInheritedRoleIdOfRoleId(0)
sql2result[sql] = newMrsForInheritedRoleIdOfRoleId([][]interface{}{
{1, true},
......
......@@ -21,6 +21,7 @@ import (
"encoding/json"
goErrors "errors"
"fmt"
"github.com/matrixorigin/matrixone/pkg/pb/plan"
"math"
"os"
"reflect"
......@@ -1709,6 +1710,12 @@ func (cwft *TxnComputationWrapper) Compile(requestCtx context.Context, u interfa
// reset plan & stmt
cwft.stmt = prepareStmt.PrepareStmt
cwft.plan = newPlan
//check privilege
err = authenticatePrivilegeOfPrepareOrExecute(requestCtx, cwft.ses, prepareStmt.PrepareStmt, newPlan)
if err != nil {
return nil, err
}
} else {
// replace @var with their values
resetVarRule := plan2.NewResetVarRefRule(cwft.ses.GetTxnCompilerContext())
......@@ -1764,13 +1771,10 @@ func buildPlan(requestCtx context.Context, ses *Session, ctx plan2.CompilerConte
}
if ret != nil {
if ses != nil && ses.GetTenantInfo() != nil {
yes, err := authenticatePrivilegeOfStatementWithObjectTypeTable(requestCtx, ses, stmt, ret)
err = authenticatePrivilegeOfStatementAndPlan(requestCtx, ses, stmt, ret)
if err != nil {
return nil, err
}
if !yes {
return nil, moerr.NewInternalError("do not have privilege to execute the statement")
}
}
return ret, err
}
......@@ -1795,13 +1799,10 @@ func buildPlan(requestCtx context.Context, ses *Session, ctx plan2.CompilerConte
}
if ret != nil {
if ses != nil && ses.GetTenantInfo() != nil {
yes, err := authenticatePrivilegeOfStatementWithObjectTypeTable(requestCtx, ses, stmt, ret)
err = authenticatePrivilegeOfStatementAndPlan(requestCtx, ses, stmt, ret)
if err != nil {
return nil, err
}
if !yes {
return nil, moerr.NewInternalError("do not have privilege to execute the statement")
}
}
}
return ret, err
......@@ -1868,6 +1869,78 @@ func incStatementErrorsCounter(tenant string, stmt tree.Statement) {
}
}
// authenticatePrivilegeOfStatement checks the user can execute the statement
func authenticatePrivilegeOfStatement(requestCtx context.Context, ses *Session, stmt tree.Statement) error {
var havePrivilege bool
var err error
if ses.GetTenantInfo() != nil {
ses.SetPrivilege(determinePrivilegeSetOfStatement(stmt))
havePrivilege, err = authenticatePrivilegeOfStatementWithObjectTypeAccountAndDatabase(requestCtx, ses, stmt)
if err != nil {
return err
}
if !havePrivilege {
err = moerr.NewInternalError("do not have privilege to execute the statement")
return err
}
havePrivilege, err = authenticatePrivilegeOfStatementWithObjectTypeNone(requestCtx, ses, stmt)
if err != nil {
return err
}
if !havePrivilege {
err = moerr.NewInternalError("do not have privilege to execute the statement")
return err
}
}
return err
}
// authenticatePrivilegeOfStatementAndPlan checks the user can execute the statement and its plan
func authenticatePrivilegeOfStatementAndPlan(requestCtx context.Context, ses *Session, stmt tree.Statement, p *plan.Plan) error {
yes, err := authenticatePrivilegeOfStatementWithObjectTypeTable(requestCtx, ses, stmt, p)
if err != nil {
return err
}
if !yes {
return moerr.NewInternalError("do not have privilege to execute the statement")
}
return nil
}
// authenticatePrivilegeOfPrepareAndExecute checks the user can execute the Prepare or Execute statement
func authenticatePrivilegeOfPrepareOrExecute(requestCtx context.Context, ses *Session, stmt tree.Statement, p *plan.Plan) error {
err := authenticatePrivilegeOfStatement(requestCtx, ses, stmt)
if err != nil {
return err
}
err = authenticatePrivilegeOfStatementAndPlan(requestCtx, ses, stmt, p)
if err != nil {
return err
}
return err
}
// canExecuteStatementInUncommittedTxn checks the user can execute the statement in an uncommitted transaction
func (mce *MysqlCmdExecutor) canExecuteStatementInUncommittedTransaction(stmt tree.Statement) error {
can := StatementCanBeExecutedInUncommittedTransaction(stmt)
if !can {
//is ddl statement
if IsDDL(stmt) {
return errorOnlyCreateStatement
} else if IsAdministrativeStatement(stmt) {
return errorAdministrativeStatement
} else if IsParameterModificationStatement(stmt) {
return errorParameterModificationInTxn
} else {
return errorUnclassifiedStatement
}
}
return nil
}
// execute query
func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string) (retErr error) {
beginInstant := time.Now()
......@@ -1920,7 +1993,6 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
var txnErr error
var rspLen uint64
var prepareStmt *PrepareStmt
var havePrivilege bool
var err2 error
var columns []interface{}
......@@ -1929,31 +2001,12 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
stmt := cw.GetAst()
requestCtx = RecordStatement(requestCtx, ses, proc, cw, beginInstant)
tenant := sysAccountName
if ses.GetTenantInfo() != nil {
//skip PREPARE statement here
if ses.GetTenantInfo() != nil && !IsPrepareStatement(stmt) {
tenant = ses.GetTenantInfo().GetTenant()
ses.SetPrivilege(determinePrivilegeSetOfStatement(stmt))
havePrivilege, err2 = authenticatePrivilegeOfStatementWithObjectTypeAccountAndDatabase(requestCtx, ses, stmt)
if err2 != nil {
logStatementStatus(requestCtx, ses, stmt, fail, err2)
return err2
}
if !havePrivilege {
retErr = moerr.NewInternalError("do not have privilege to execute the statement")
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
}
havePrivilege, err2 = authenticatePrivilegeOfStatementWithObjectTypeNone(requestCtx, ses, stmt)
if err2 != nil {
logStatementStatus(requestCtx, ses, stmt, fail, err2)
return err2
}
if !havePrivilege {
retErr = moerr.NewInternalError("do not have privilege to execute the statement")
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
err = authenticatePrivilegeOfStatement(requestCtx, ses, stmt)
if err != nil {
return err
}
}
......@@ -1971,26 +2024,9 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
<- has active transaction
*/
if ses.InActiveTransaction() {
can := StatementCanBeExecutedInUncommittedTransaction(stmt)
if !can {
//is ddl statement
if IsDDL(stmt) {
retErr = errorOnlyCreateStatement
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
} else if IsAdministrativeStatement(stmt) {
retErr = errorAdministrativeStatement
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
} else if IsParameterModificationStatement(stmt) {
retErr = errorParameterModificationInTxn
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
} else {
retErr = errorUnclassifiedStatement
logStatementStatus(requestCtx, ses, stmt, fail, retErr)
return retErr
}
err = mce.canExecuteStatementInUncommittedTransaction(stmt)
if err != nil {
return err
}
}
......@@ -2061,12 +2097,20 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
if err != nil {
goto handleFailed
}
err = authenticatePrivilegeOfPrepareOrExecute(requestCtx, ses, prepareStmt.PrepareStmt, prepareStmt.PreparePlan.GetDcl().GetPrepare().GetPlan())
if err != nil {
goto handleFailed
}
case *tree.PrepareString:
selfHandle = true
prepareStmt, err = mce.handlePrepareString(st)
if err != nil {
goto handleFailed
}
err = authenticatePrivilegeOfPrepareOrExecute(requestCtx, ses, prepareStmt.PrepareStmt, prepareStmt.PreparePlan.GetDcl().GetPrepare().GetPlan())
if err != nil {
goto handleFailed
}
case *tree.Deallocate:
selfHandle = true
err = mce.handleDeallocate(st)
......@@ -2296,7 +2340,7 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
Step 4: Serialize the execution plan by json
*/
if cwft, ok := cw.(*TxnComputationWrapper); ok {
cwft.RecordExecPlan(requestCtx)
_ = cwft.RecordExecPlan(requestCtx)
}
//just status, no result set
case *tree.CreateTable, *tree.DropTable, *tree.CreateDatabase, *tree.DropDatabase,
......@@ -2333,7 +2377,7 @@ func (mce *MysqlCmdExecutor) doComQuery(requestCtx context.Context, sql string)
Step 4: Serialize the execution plan by json
*/
if cwft, ok := cw.(*TxnComputationWrapper); ok {
cwft.RecordExecPlan(requestCtx)
_ = cwft.RecordExecPlan(requestCtx)
}
case *tree.ExplainAnalyze:
explainColName := "QUERY PLAN"
......@@ -2775,6 +2819,15 @@ func IsParameterModificationStatement(stmt tree.Statement) bool {
return false
}
// IsPrepareStatement checks the statement is the prepare statement.
func IsPrepareStatement(stmt tree.Statement) bool {
switch stmt.(type) {
case *tree.PrepareStmt, *tree.PrepareString:
return true
}
return false
}
/*
IsStatementToBeCommittedInActiveTransaction checks the statement that need to be committed
in an active transaction.
......
......@@ -67,6 +67,7 @@ func (rm *RoutineManager) Created(rs goetty.IOSession) {
// this mpool will be deleted. Maybe in the following Closed method.
ses := NewSession(routine.protocol, nil, rm.pu, gSysVariables)
ses.SetRequestContext(routine.cancelRoutineCtx)
ses.SetFromRealUser(true)
routine.SetSession(ses)
pro.SetSession(ses)
......
......@@ -120,6 +120,10 @@ type Session struct {
priv *privilege
errInfo *errInfo
//fromRealUser distinguish the sql that the user inputs from the one
//that the internal or background program executes
fromRealUser bool
}
// Clean up all resources hold by the session. As of now, the mpool
......@@ -785,6 +789,14 @@ func (ses *Session) SetPrivilege(priv *privilege) {
ses.priv = priv
}
func (ses *Session) SetFromRealUser(b bool) {
ses.fromRealUser = b
}
func (ses *Session) GetFromRealUser() bool {
return ses.fromRealUser
}
func (th *TxnHandler) SetSession(ses *Session) {
th.ses = ses
}
......
......@@ -31,7 +31,7 @@ const (
)
var (
initMysqlSysTables = []string{
InitMysqlSysTables = []string{
`CREATE TABLE IF NOT EXISTS user (
Host char(255) NOT NULL DEFAULT '',
User char(32) NOT NULL DEFAULT '',
......@@ -145,9 +145,9 @@ var (
Column_priv varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (Host,Db,User,Table_name),
KEY Grantor (Grantor)
)`,
);`,
}
initInformationSchemaSysTables = []string{
InitInformationSchemaSysTables = []string{
"CREATE TABLE IF NOT EXISTS KEY_COLUMN_USAGE(" +
"CONSTRAINT_CATALOG varchar(64)," +
"CONSTRAINT_SCHEMA varchar(64)," +
......@@ -161,7 +161,7 @@ var (
"REFERENCED_TABLE_SCHEMA varchar(64)," +
"REFERENCED_TABLE_NAME varchar(64)," +
"REFERENCED_COLUMN_NAME varchar(64)" +
")",
");",
"CREATE TABLE IF NOT EXISTS COLUMNS(" +
"TABLE_CATALOG varchar(64)," +
"TABLE_SCHEMA varchar(64)," +
......@@ -185,7 +185,7 @@ var (
"COLUMN_COMMENT text," +
"GENERATION_EXPRESSION longtext," +
"SRS_ID int unsigned" +
")",
");",
"CREATE TABLE IF NOT EXISTS PROFILING (" +
"QUERY_ID int NOT NULL DEFAULT '0'," +
"SEQ int NOT NULL DEFAULT '0'," +
......@@ -205,7 +205,7 @@ var (
"SOURCE_FUNCTION varchar(30) DEFAULT NULL," +
"SOURCE_FILE varchar(20) DEFAULT NULL," +
"SOURCE_LINE int DEFAULT NULL" +
")",
");",
"CREATE TABLE IF NOT EXISTS `PROCESSLIST` (" +
"ID bigint unsigned NOT NULL DEFAULT '0'," +
"USER varchar(32) NOT NULL DEFAULT ''," +
......@@ -215,13 +215,13 @@ var (
"TIME int NOT NULL DEFAULT '0'," +
"STATE varchar(64) DEFAULT NULL," +
"INFO longtext" +
")",
");",
"CREATE TABLE IF NOT EXISTS USER_PRIVILEGES (" +
"GRANTEE varchar(292) NOT NULL DEFAULT ''," +
"TABLE_CATALOG varchar(512) NOT NULL DEFAULT ''," +
"PRIVILEGE_TYPE varchar(64) NOT NULL DEFAULT ''," +
"IS_GRANTABLE varchar(3) NOT NULL DEFAULT ''" +
")",
");",
"CREATE TABLE IF NOT EXISTS SCHEMATA (" +
"CATALOG_NAME varchar(64)," +
"SCHEMA_NAME varchar(64)," +
......@@ -229,13 +229,13 @@ var (
"DEFAULT_COLLATION_NAME varchar(64)," +
"SQL_PATH binary(0)," +
"DEFAULT_ENCRYPTION varchar(10)" +
")",
");",
"CREATE TABLE IF NOT EXISTS CHARACTER_SETS(" +
"CHARACTER_SET_NAME varchar(64)," +
"DEFAULT_COLLATE_NAME varchar(64)," +
"DESCRIPTION varchar(2048)," +
"MAXLEN int unsigned" +
")",
");",
"CREATE TABLE IF NOT EXISTS TRIGGERS(" +
"TRIGGER_CATALOG varchar(64)," +
"TRIGGER_SCHEMA varchar(64)," +
......@@ -259,7 +259,7 @@ var (
"CHARACTER_SET_CLIENT varchar(64)," +
"COLLATION_CONNECTION varchar(64)," +
"DATABASE_COLLATION varchar(64)" +
")",
");",
"CREATE TABLE IF NOT EXISTS TABLES(" +
"TABLE_CATALOG varchar(64)," +
"TABLE_SCHEMA varchar(64)," +
......@@ -282,7 +282,7 @@ var (
"CHECKSUM bigint," +
"CREATE_OPTIONS varchar(256)," +
"TABLE_COMMENT text" +
")",
");",
}
)
......@@ -308,7 +308,7 @@ func initMysqlTables(ctx context.Context, ieFactory func() ie.InternalExecutor,
}()
instant := time.Now()
for _, sql := range initMysqlSysTables {
for _, sql := range InitMysqlSysTables {
mustExec(sql)
}
createCost = time.Since(instant)
......@@ -330,7 +330,7 @@ func initInformationSchemaTables(ctx context.Context, ieFactory func() ie.Intern
}()
instant := time.Now()
for _, sql := range initInformationSchemaSysTables {
for _, sql := range InitInformationSchemaSysTables {
mustExec(sql)
}
createCost = time.Since(instant)
......
drop account if exists NtrWE02sgtvCXu;
create account NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
create account NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
internal error: the tenant ntrwe02sgtvcxu exists
create account if not exists NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
drop account NtrWE02sgtvCXu;
drop account NtrWE02sgtvCXu;
internal error: there is no account ntrwe02sgtvcxu
drop account if exists NtrWE02sgtvCXu;
drop account if exists NtrWE02sgtvCXu;
create account NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
create account NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
create account if not exists NtrWE02sgtvCXu admin_name '謳95071驊2连5202曹' identified by '鑊78狿殻01948楲777';
drop account NtrWE02sgtvCXu;
drop account NtrWE02sgtvCXu;
drop account if exists NtrWE02sgtvCXu;
\ No newline at end of file
drop account if exists `DLmFjq026Cd5T`;
create account `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
create account `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
internal error: the tenant DLmFjq026Cd5T exists
create account if not exists `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
drop account `DLmFjq026Cd5T`;
drop account `DLmFjq026Cd5T`;
internal error: there is no account DLmFjq026Cd5T
drop account if exists `DLmFjq026Cd5T`;
drop account if exists `DLmFjq026Cd5T`;
create account `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
create account `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
create account if not exists `DLmFjq026Cd5T` admin_name '杷062廼鄮704凈4547' identified by '1罖914尘1029垳4鋧0';
drop account `DLmFjq026Cd5T`;
drop account `DLmFjq026Cd5T`;
drop account if exists `DLmFjq026Cd5T`;
\ No newline at end of file
This diff is collapsed.
create account 43349饪眃887933348儵巪516030 admin_name '怋4孲0406乜972胺10' identified by '070261仜菅稒6咍926';
drop account 43349饪眃887933348儵巪516030;
create account 182粓爧蔾4甔矨暍295118嘪冢5776850762 admin_name '5郴0荊016弲82霻092' identified by '2觊761颰龊5呈67462';
drop account 182粓爧蔾4甔矨暍295118嘪冢5776850762;
create account 9018341764860官稨淿恒3545828 admin_name '8撚3宊0湭583993篒5' identified by '抎35586茠敁8醖1192';
drop account 9018341764860官稨淿恒3545828;
create account 0163崢將0葂摞仇28734267718浢迏4798 admin_name '52詠22膘92荻3626擐' identified by '蕝潝51碠30306杣562';
drop account 0163崢將0葂摞仇28734267718浢迏4798;
create account 34583480385052609739敨鲍覴 admin_name '00669瑼604鵞9渻8阏' identified by '0623鸽804藆0旮59謖';
drop account 34583480385052609739敨鲍覴;
create account 84捰苙710833痘罖398646270424 admin_name '75517匣31柱29怱镪2' identified by '悻嵴046109颬淠3846';
drop account 84捰苙710833痘罖398646270424;
create account 7192285481悠蕣4914統瓝666260 admin_name '713肳060膞0揦485啗' identified by '60搲7詩60緓29駶922';
drop account 7192285481悠蕣4914統瓝666260;
create account 妵冣64426864481440韐凐濬481313 admin_name '07敯9嫚106915荷华3' identified by '21959艸76臁魿271难';
drop account 妵冣64426864481440韐凐濬481313;
create account 68372320裭踇8芏岙77534嶝麢515297 admin_name '310鸲呆92378惫砅03' identified by '桛禅770嫳941767謍1';
drop account 68372320裭踇8芏岙77534嶝麢515297;
create account 80168297067286569鵂琦8仝怢60 admin_name '羶2憃546螦491228芥' identified by '60蚊830衋2躮0昦448';
drop account 80168297067286569鵂琦8仝怢60;
create account 9120931沘雹06205619299儛黖74鄟氎 admin_name '368焾9齅笷300212偆' identified by '238锴7薃281抿5睞42';
drop account 9120931沘雹06205619299儛黖74鄟氎;
create account 11朥奘475458661727268300 admin_name '43740齟7埻457鯘穸7' identified by '阅9趱021492縍905鮛';
drop account 11朥奘475458661727268300;
create account 5050581瘯隓驏12问澠4416乀葶2298743 admin_name '97229狇25贜68譐6嵜' identified by '2黠76448樨砽605昖4';
drop account 5050581瘯隓驏12问澠4416乀葶2298743;
create account 4144087踝饍4120涤堦809150036 admin_name '17罙31嶪73飧64齷96' identified by '444勼喗11燎7070珫5';
drop account 4144087踝饍4120涤堦809150036;
create account 80438864679龪脥692582870 admin_name '箺6244乮405铿465餙' identified by '936徻8瞇8卿274囏46';
drop account 80438864679龪脥692582870;
create account 6詥箿472148570孏睗1387059443 admin_name '茑1029拥6蹄狺46914' identified by '4胿32緛1兆224財183';
drop account 6詥箿472148570孏睗1387059443;
create account 412843灳钁锼蟸纹12892518366049 admin_name '4505憡4涣7戧2残263' identified by '48稍772吼7972鼡7旳';
drop account 412843灳钁锼蟸纹12892518366049;
create account 1484蝟攀6厤嬍570553203456940 admin_name '995銐欺韮49052蓣77' identified by '2137973啈氽7懷嚙82';
drop account 1484蝟攀6厤嬍570553203456940;
create account 628慩脙44203283914670973 admin_name '587薅7蔠11蓆414碞7' identified by '4942廨4縵汥87撵739';
drop account 628慩脙44203283914670973;
create account 4710鎌啒蕾3740摂揻9582148059枏爂昙29 admin_name '悦6酕4221騵3裚4669' identified by '0窊7168魈繚8196萸7';
drop account 4710鎌啒蕾3740摂揻9582148059枏爂昙29;
create account 4889189745280廛粫147優墓7657 admin_name '0052809縰7唒鴠73綄' identified by '889娗7簄俞1584暝02';
drop account 4889189745280廛粫147優墓7657;
create account 5965秧楿07797018942氤鹥03682 admin_name '4134詪2絥5虃07蘑74' identified by '4罴94蕉68245椀8占2';
drop account 5965秧楿07797018942氤鹥03682;
create account 80425墎櫼14681702潿硽屇3764151 admin_name '5221冢8蠍3镍227氛4' identified by '糧511馩髖06095貞21';
drop account 80425墎櫼14681702潿硽屇3764151;
create account 914騿蜄曡32011845499958嘾髋138 admin_name '344犴6鰹鬿05洎8549' identified by '6642瘭趍92079茤伺8';
drop account 914騿蜄曡32011845499958嘾髋138;
create account 79392鉭攆2067121308422偧皩12 admin_name '7剩090炵731淔86鉁4' identified by '澹9襄41497抭9417顙';
drop account 79392鉭攆2067121308422偧皩12;
create account 4886杍瓗14723426摏膒嚒9057307幷礳8 admin_name '26皇潀匂1線6711154' identified by '73靎5蔓38晩3阨1324';
drop account 4886杍瓗14723426摏膒嚒9057307幷礳8;
create account 476509771887瑾譕19961956 admin_name '綵6掹8敦66疙346085' identified by '7796铃6昨6偷0歕547';
drop account 476509771887瑾譕19961956;
create account 98043124瑲制62871喞鯖室8486411 admin_name '3滺94709痜03蔸9蔖5' identified by '気鳮0576370668晚调';
drop account 98043124瑲制62871喞鯖室8486411;
create account 00712271261诞拸670114澠姚962 admin_name '墕0894126貣訶頲300' identified by '4窬聃7523826撵樤48';
drop account 00712271261诞拸670114澠姚962;
create account 5溯茏1447874鏯娆295120728503 admin_name '6燂1644翲90腈灏215' identified by '32穑利6櫗8028禳686';
drop account 5溯茏1447874鏯娆295120728503;
create account 21896頚攠94497417566掎謢2952 admin_name '07鑧733貗95男354讲' identified by '覃903彍99532犗66築';
drop account 21896頚攠94497417566掎謢2952;
create account 49159158032咜考991腛缟齪834457 admin_name '窃68傫5529塐03锫81' identified by '8額1薈55鄤190攳627';
drop account 49159158032咜考991腛缟齪834457;
create account 721633飍徕姦4749400000枔蕣6916 admin_name '鞬牮23貴1215孜5580' identified by '9295厒072鰋跽6籏11';
drop account 721633飍徕姦4749400000枔蕣6916;
create account 21778彿267厲抃9766748150諃幎13 admin_name '配8筴4140369絇90紁' identified by '542526兾942媍兿1儞';
drop account 21778彿267厲抃9766748150諃幎13;
create account 5288耭筽鮭3630741788108667 admin_name '008譂4蛗3102邫0郍6' identified by '32鴅63爪2故侣27227';
drop account 5288耭筽鮭3630741788108667;
create account 6511枞梧9037478695700871 admin_name '762175豸1攨呐701樒' identified by '鸆珡84斖216829礩34';
drop account 6511枞梧9037478695700871;
create account 022110705黠禸675苲烤鉠39355386 admin_name '05087娣9譱5謬28攟6' identified by '85嗦63樑鏱0826丸14';
drop account 022110705黠禸675苲烤鉠39355386;
create account 19026窓朽27355420317524裒純给4 admin_name '25滼9躷4823暦23掛5' identified by '麗赕91233痷76344亐';
drop account 19026窓朽27355420317524裒純给4;
create account 404纨蚟11215899532754778 admin_name '鈔椞21溾18敶068148' identified by '51561嵮9彛11鱂48道';
drop account 404纨蚟11215899532754778;
create account 8141563770790籬寺0444865 admin_name '躞696139鑵6凟80腊6' identified by '3鉐騢012795倧42溺6';
drop account 8141563770790籬寺0444865;
create account 6922835905225187涧乒0810 admin_name '01455湎迟鎺53578舽' identified by '26羫5塺97920荠50舾';
drop account 6922835905225187涧乒0810;
create account 887晱弦716儻趾56198缣佩707043846 admin_name '100躛605濞7102欓儼' identified by '黳4瓱144489圶81殛5';
drop account 887晱弦716儻趾56198缣佩707043846;
create account 815591鳡幊34326035椭谴166716 admin_name '93鮂63冫镥8833仍46' identified by '悼6趫949282556圕葆';
drop account 815591鳡幊34326035椭谴166716;
create account 201854981髷鎛117薤麜07767819 admin_name '杆035帯168鄌4凜581' identified by '42霟79確曷0坍77566';
drop account 201854981髷鎛117薤麜07767819;
create account 54囻嗻圱欜2290隓盕90209336671070 admin_name '58锕973瞼譮98807欃' identified by '01癳0030604囔炈2阾';
drop account 54囻嗻圱欜2290隓盕90209336671070;
create account 50245988413520184涳堆40謿4颀滶 admin_name '8諉9嵖67426紕965靏' identified by '896匎308963鐃肃8蒬';
drop account 50245988413520184涳堆40謿4颀滶;
create account 851鱩耍9脤荳69533600241磐癃83745 admin_name '60骼3咎5972怯63曉1' identified by '314930尵烈24枫70岈';
drop account 851鱩耍9脤荳69533600241磐癃83745;
create account 46598931682292萼竧177597 admin_name '0861説锷駄03濺3648' identified by '迅918缋諪7569邩693';
drop account 46598931682292萼竧177597;
create account 蕊擉848綿93贻棧68607723瓻樯6782595 admin_name '82428153鑷薍7饏8魼' identified by '銴72齃078938馠0鉊1';
drop account 蕊擉848綿93贻棧68607723瓻樯6782595;
create account 837257828秿134491160寺硄葎55 admin_name '6琬8100穦3狧3状293' identified by '5侍58遱1儂873304牘';
drop account 837257828秿134491160寺硄葎55;
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
internal error: the role yi5j exists
create role if not exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role if not exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
internal error: there is no role yi5j
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role if exists qfqAY3t$3FyELi_nllX$3;
create role qfqAY3t$3FyELi_nllX$3;
drop role qfqAY3t$3FyELi_nllX$3,qfqAY3t$3FyELi_nllX$3,qfqAY3t$3FyELi_nllX$3;
internal error: there is no role qfqay3t$3fyeli_nllx$3
drop role qfqAY3t$3FyELi_nllX$3;
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role if not exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
create role if not exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role if exists yI5j,zjYSYy9wK9klzyKIpC$IyCFeC,'30硄捛6藂945覣3809','适6髂祻0269贀90268','鉛亂3390984輾6糱17';
drop role if exists qfqAY3t$3FyELi_nllX$3;
create role qfqAY3t$3FyELi_nllX$3;
drop role qfqAY3t$3FyELi_nllX$3,qfqAY3t$3FyELi_nllX$3,qfqAY3t$3FyELi_nllX$3;
drop role qfqAY3t$3FyELi_nllX$3;
\ No newline at end of file
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
internal error: the role rrw exists
create role if not exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role if not exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
internal error: there is no role rrw
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role if exists `AiaqE`;
create role `AiaqE`;
drop role `AiaqE`,`AiaqE`,`AiaqE`;
internal error: there is no role AiaqE
drop role `AiaqE`;
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role if not exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
create role if not exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role if exists `rrw`,`JOzSxk`,'88桢38鞨804譓905岏','291溥苧828孷9烙248','52殦6541驏696悵慕9';
drop role if exists `AiaqE`;
create role `AiaqE`;
drop role `AiaqE`,`AiaqE`,`AiaqE`;
drop role `AiaqE`;
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
create user eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
create user eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
internal error: the user ebswy6ouztimwdhi exists
create user if not exists eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
create user if not exists eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311',mHFHomYNflTqe43@DQ$ identified by '5漽8查5907栌8521绬';
drop user eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
drop user eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
internal error: there is no user ebswy6ouztimwdhi
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge,mHFHomYNflTqe43@DQ$;
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge,mHFHomYNflTqe43@DQ$;
drop user if exists t7CY356EM3Uhd@IR@9_0KYEXY;
create user t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158',t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158',t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158';
internal error: the user t7cy356em3uhd@ir@9_0kyexy exists
drop user if exists LXT5kBkD2Q393W@Xri3e3Uq3G8y;
create user LXT5kBkD2Q393W@Xri3e3Uq3G8y identified by '438悍420阉扄663萍4';
drop user LXT5kBkD2Q393W@Xri3e3Uq3G8y,LXT5kBkD2Q393W@Xri3e3Uq3G8y,LXT5kBkD2Q393W@Xri3e3Uq3G8y;
internal error: there is no user lxt5kbkd2q393w@xri3e3uq3g8y
drop user LXT5kBkD2Q393W@Xri3e3Uq3G8y;
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
create user eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
create user eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
create user if not exists eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311';
create user if not exists eBswy6OUZtiMWDHI identified by '20攝柀狆20380寡376',CrmtLr identified by '13432栓4橬2512欫熥',J52C5Wn@cLQjHXMhCxabiO@fqw8dge identified by '芸05弻542阍硉12311',mHFHomYNflTqe43@DQ$ identified by '5漽8查5907栌8521绬';
drop user eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
drop user eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge;
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge,mHFHomYNflTqe43@DQ$;
drop user if exists eBswy6OUZtiMWDHI,CrmtLr,J52C5Wn@cLQjHXMhCxabiO@fqw8dge,mHFHomYNflTqe43@DQ$;
drop user if exists t7CY356EM3Uhd@IR@9_0KYEXY;
create user t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158',t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158',t7CY356EM3Uhd@IR@9_0KYEXY identified by '殜瀃03昲25誻519158';
drop user if exists LXT5kBkD2Q393W@Xri3e3Uq3G8y;
create user LXT5kBkD2Q393W@Xri3e3Uq3G8y identified by '438悍420阉扄663萍4';
drop user LXT5kBkD2Q393W@Xri3e3Uq3G8y,LXT5kBkD2Q393W@Xri3e3Uq3G8y,LXT5kBkD2Q393W@Xri3e3Uq3G8y;
drop user LXT5kBkD2Q393W@Xri3e3Uq3G8y;
\ No newline at end of file
drop user if exists `oE2JKXe7OpQ65ktaAu5C5X`,`LtIFN`,`_De4$6Rj`;
create user `oE2JKXe7OpQ65ktaAu5C5X` identified by '颐68鼡430731徔盙28',`LtIFN` identified by '4堲穃1074872駻夙92',`_De4$6Rj` identified by '麮62稀9235419灘3鐽';
create user `oE2JKXe7OpQ65ktaAu5C5X` identified by '颐68鼡430731徔盙28',`LtIFN` identified by '4堲穃1074872駻夙92',`_De4$6Rj` identified by '麮62稀9235419灘3鐽';
internal error: the user oE2JKXe7OpQ65ktaAu5C5X exists
create user if not exists `oE2JKXe7OpQ65ktaAu5C5X` identified by '颐68鼡430731徔盙28',`LtIFN` identified by '4堲穃1074872駻夙92',`_De4$6Rj` identified by '麮62稀9235419灘3鐽';
create user if not exists `oE2JKXe7OpQ65ktaAu5C5X` identified by '颐68鼡430731徔盙28',`LtIFN` identified by '4堲穃1074872駻夙92',`_De4$6Rj` identified by '麮62稀9235419灘3鐽',`uCUMZkXkPfC2f5eWIQKvK` identified by '2吋6337豥71栎29躃1';
drop user `oE2JKXe7OpQ65ktaAu5C5X`,`LtIFN`,`_De4$6Rj`;
drop user `oE2JKXe7OpQ65ktaAu5C5X`,`LtIFN`,`_De4$6Rj`;
internal error: there is no user oE2JKXe7OpQ65ktaAu5C5X
drop user if exists `oE2JKXe7OpQ65ktaAu5C5X`,`LtIFN`,`_De4$6Rj`,`uCUMZkXkPfC2f5eWIQKvK`;
drop user if exists `oE2JKXe7OpQ65ktaAu5C5X`,`LtIFN`,`_De4$6Rj`,`uCUMZkXkPfC2f5eWIQKvK`;
drop user if exists `HQd0AcAyUtwZM139oTBor4LWn`;
create user `HQd0AcAyUtwZM139oTBor4LWn` identified by '9癜73樝5997釽82舳0',`HQd0AcAyUtwZM139oTBor4LWn` identified by '9癜73樝5997釽82舳0',`HQd0AcAyUtwZM139oTBor4LWn` identified by '9癜73樝5997釽82舳0';
internal error: the user HQd0AcAyUtwZM139oTBor4LWn exists
drop user if exists `KI9QW$MHSgc3`;
create user `KI9QW$MHSgc3` identified by '80604766堩35鞔颡訬';
drop user `KI9QW$MHSgc3`,`KI9QW$MHSgc3`,`KI9QW$MHSgc3`;
internal error: there is no user KI9QW$MHSgc3
drop user `KI9QW$MHSgc3`;
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment