@@ -12,9 +12,12 @@ import (
1212 "time"
1313
1414 "github.com/cockroachdb/cockroach/pkg/base"
15+ "github.com/cockroachdb/cockroach/pkg/clusterversion"
1516 "github.com/cockroachdb/cockroach/pkg/crosscluster/replicationtestutils"
1617 "github.com/cockroachdb/cockroach/pkg/jobs"
1718 "github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
19+ "github.com/cockroachdb/cockroach/pkg/security/username"
20+ "github.com/cockroachdb/cockroach/pkg/server"
1821 "github.com/cockroachdb/cockroach/pkg/sql"
1922 "github.com/cockroachdb/cockroach/pkg/testutils"
2023 "github.com/cockroachdb/cockroach/pkg/testutils/jobutils"
@@ -544,10 +547,51 @@ func TestAlterReplicationJobErrors(t *testing.T) {
544547 defer srv .Stopper ().Stop (ctx )
545548
546549 db := sqlutils .MakeSQLRunner (sqlDB )
550+ db .Exec (t , "CREATE TENANT t1" )
551+
552+ db .Exec (t , fmt .Sprintf ("CREATE USER %s" , username .TestUser ))
553+ testuser := sqlutils .MakeSQLRunner (srv .SQLConn (t , serverutils .User (username .TestUser )))
547554
548555 t .Run ("alter tenant subqueries" , func (t * testing.T ) {
549556 // Regression test for #136339
550557 db .ExpectErr (t , "subqueries are not allowed" , "ALTER TENANT (select 't2') START REPLICATION OF t1 ON 'foo'" )
551558 })
559+ t .Run ("alter replication dest privs" , func (t * testing.T ) {
560+ cmd := "ALTER TENANT t1 SET REPLICATION RETENTION ='100ms'"
561+ testuser .ExpectErr (t , "user testuser does not have MANAGEVIRTUALCLUSTER system privilege" , cmd )
562+ db .Exec (t , fmt .Sprintf ("GRANT SYSTEM MANAGEVIRTUALCLUSTER TO %s" , username .TestUser ))
563+ testuser .ExpectErr (t , "user testuser does not have REPLICATIONDEST system privilege" , cmd )
564+ db .Exec (t , fmt .Sprintf ("GRANT SYSTEM REPLICATIONDEST TO %s" , username .TestUser ))
565+ // Implies we got past the priv checks.
566+ testuser .ExpectErr (t , `does not have an active replication consumer job` , cmd )
567+ db .Exec (t , fmt .Sprintf ("REVOKE SYSTEM MANAGEVIRTUALCLUSTER FROM %s" , username .TestUser ))
568+ })
569+ t .Run ("alter replication source privs" , func (t * testing.T ) {
570+ cmd := "ALTER TENANT t1 SET REPLICATION SOURCE EXPIRATION WINDOW ='100ms'"
571+ testuser .ExpectErr (t , "user testuser does not have MANAGEVIRTUALCLUSTER system privilege" , cmd )
572+ db .Exec (t , fmt .Sprintf ("GRANT SYSTEM MANAGEVIRTUALCLUSTER TO %s" , username .TestUser ))
573+ testuser .ExpectErr (t , "user testuser does not have REPLICATIONSOURCE system privilege" , cmd )
574+ db .Exec (t , fmt .Sprintf ("GRANT SYSTEM REPLICATIONSOURCE TO %s" , username .TestUser ))
575+ testuser .Exec (t , cmd )
576+ })
577+ t .Run ("alter replication dest priv 24.3" , func (t * testing.T ) {
578+ params := base.TestServerArgs {
579+ DefaultTestTenant : base .TestControlsTenantsExplicitly ,
580+ }
581+ params .Knobs .Server = & server.TestingKnobs {
582+ ClusterVersionOverride : clusterversion .V24_3 .Version (),
583+ DisableAutomaticVersionUpgrade : make (chan struct {}),
584+ }
552585
586+ srv , sqlDB , _ := serverutils .StartServer (t , params )
587+ defer srv .Stopper ().Stop (ctx )
588+ db := sqlutils .MakeSQLRunner (sqlDB )
589+ db .Exec (t , "CREATE TENANT t1" )
590+ db .Exec (t , fmt .Sprintf ("CREATE USER %s" , username .TestUser ))
591+ testuser := sqlutils .MakeSQLRunner (srv .SQLConn (t , serverutils .User (username .TestUser )))
592+ db .Exec (t , fmt .Sprintf ("GRANT SYSTEM MANAGEVIRTUALCLUSTER TO %s" , username .TestUser ))
593+ // Implies we got past the priv checks, without REPLICATIONDEST.
594+ cmd := "ALTER TENANT t1 SET REPLICATION RETENTION ='100ms'"
595+ testuser .ExpectErr (t , `does not have an active replication consumer job` , cmd )
596+ })
553597}
0 commit comments