Skip to content

Commit 234b6fd

Browse files
committed
changefeedccl: add CHANGEFEED privilege to DB and Schema privileges
add CHANGEFEED privilege to DB and Schema privileges to support database/schema-level changefeeds. Resolves: #149470 Release note: None
1 parent 1e8ab10 commit 234b6fd

File tree

6 files changed

+38
-8
lines changed

6 files changed

+38
-8
lines changed

pkg/backup/show_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ GRANT UPDATE ON top_secret TO agent_bond;
371371
`GRANT CREATE, USAGE ON SCHEMA public TO public; ` +
372372
`GRANT ALL ON SCHEMA public TO root WITH GRANT OPTION; `, `root`},
373373
{`locator`, `schema`, `GRANT ALL ON SCHEMA locator TO admin WITH GRANT OPTION; ` +
374-
`GRANT CREATE ON SCHEMA locator TO agent_bond; ` +
374+
`GRANT CHANGEFEED, CREATE ON SCHEMA locator TO agent_bond; ` +
375375
`GRANT ALL ON SCHEMA locator TO m; ` +
376376
`GRANT ALL ON SCHEMA locator TO root WITH GRANT OPTION; `, `root`},
377377
{`continent`, `type`, `GRANT ALL ON TYPE continent TO admin WITH GRANT OPTION; ` +

pkg/ccl/changefeedccl/changefeed_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3707,9 +3707,6 @@ func TestChangefeedGrant(t *testing.T) {
37073707
rootDB := sqlutils.MakeSQLRunner(s.DB)
37083708
rootDB.Exec(t, `create user guest`)
37093709

3710-
// GRANT CHANGEFEED ON DATABASE is an error.
3711-
rootDB.ExpectErr(t, `invalid privilege type CHANGEFEED for database`, `GRANT CHANGEFEED ON DATABASE d TO guest`)
3712-
37133710
// CHANGEFEED can be granted as a default privilege on all new tables in a schema
37143711
rootDB.ExecMultiple(t,
37153712
`ALTER DEFAULT PRIVILEGES IN SCHEMA d.public GRANT CHANGEFEED ON TABLES TO guest`,

pkg/sql/catalog/catpb/privilege_test.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ func TestPrivilege(t *testing.T) {
138138
},
139139
privilege.Table,
140140
},
141-
// Ensure revoking BACKUP, CONNECT, CREATE, DROP, SELECT, INSERT, DELETE, UPDATE, ZONECONFIG, RESTORE
141+
// Ensure revoking BACKUP, CONNECT, CREATE, DROP, SELECT, INSERT, DELETE, UPDATE, ZONECONFIG, RESTORE, CHANGEFEED
142142
// from a user with ALL privilege on a database leaves the user with no privileges.
143143
{testUser,
144144
privilege.List{privilege.ALL},
145145
privilege.List{privilege.BACKUP, privilege.CONNECT, privilege.CREATE, privilege.DROP, privilege.SELECT,
146-
privilege.INSERT, privilege.DELETE, privilege.UPDATE, privilege.ZONECONFIG, privilege.RESTORE},
146+
privilege.INSERT, privilege.DELETE, privilege.UPDATE, privilege.ZONECONFIG, privilege.RESTORE, privilege.CHANGEFEED},
147147
[]catpb.UserPrivilege{
148148
{User: username.AdminRoleName(), Privileges: []privilege.Privilege{{Kind: privilege.ALL, GrantOption: true}}},
149149
},
@@ -555,6 +555,16 @@ func TestGrantWithGrantOption(t *testing.T) {
555555
privilege.List{privilege.ALL, privilege.CREATE},
556556
privilege.List{privilege.ALL},
557557
privilege.List{privilege.ALL}},
558+
{catpb.NewPrivilegeDescriptor(testUser, privilege.List{}, privilege.List{}, username.AdminRoleName()),
559+
testUser, privilege.Schema,
560+
privilege.List{privilege.CHANGEFEED},
561+
privilege.List{privilege.CHANGEFEED},
562+
privilege.List{privilege.CHANGEFEED}},
563+
{catpb.NewPrivilegeDescriptor(testUser, privilege.List{}, privilege.List{}, username.AdminRoleName()),
564+
testUser, privilege.Database,
565+
privilege.List{privilege.CHANGEFEED},
566+
privilege.List{privilege.CHANGEFEED},
567+
privilege.List{privilege.CHANGEFEED}},
558568
}
559569

560570
for tcNum, tc := range testCases {
@@ -651,6 +661,20 @@ func TestRevokeWithGrantOption(t *testing.T) {
651661
privilege.List{},
652662
privilege.List{},
653663
true},
664+
{catpb.NewPrivilegeDescriptor(testUser, privilege.List{privilege.CHANGEFEED}, privilege.List{privilege.CHANGEFEED}, username.AdminRoleName()),
665+
testUser, privilege.Database,
666+
false,
667+
privilege.List{privilege.CHANGEFEED},
668+
privilege.List{},
669+
privilege.List{},
670+
true},
671+
{catpb.NewPrivilegeDescriptor(testUser, privilege.List{privilege.CHANGEFEED}, privilege.List{privilege.CHANGEFEED}, username.AdminRoleName()),
672+
testUser, privilege.Schema,
673+
false,
674+
privilege.List{privilege.CHANGEFEED},
675+
privilege.List{},
676+
privilege.List{},
677+
true},
654678
}
655679

656680
for tcNum, tc := range testCases {

pkg/sql/logictest/testdata/logic_test/alter_default_privileges_for_schema

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ database_name schema_name grantee privilege_type is_grantable
8484
test s2 admin ALL true
8585
test s2 root ALL true
8686
test s2 testuser CREATE false
87+
test s2 testuser CHANGEFEED false
8788
test s2 testuser2 CREATE false
89+
test s2 testuser2 CHANGEFEED false
8890

8991
statement ok
9092
ALTER DEFAULT PRIVILEGES REVOKE ALL ON SCHEMAS FROM testuser, testuser2

pkg/sql/logictest/testdata/logic_test/grant_database

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,14 @@ SHOW GRANTS ON DATABASE a
5858
a admin ALL true
5959
a public CONNECT false
6060
a readwrite BACKUP true
61+
a readwrite CHANGEFEED true
6162
a readwrite CREATE true
6263
a readwrite DROP true
6364
a readwrite RESTORE true
6465
a readwrite ZONECONFIG true
6566
a root ALL true
6667
a test-user BACKUP true
68+
a test-user CHANGEFEED true
6769
a test-user CREATE true
6870
a test-user DROP true
6971
a test-user RESTORE true
@@ -74,11 +76,13 @@ SHOW GRANTS ON DATABASE a FOR readwrite, "test-user"
7476
----
7577
a public CONNECT false
7678
a readwrite BACKUP true
79+
a readwrite CHANGEFEED true
7780
a readwrite CREATE true
7881
a readwrite DROP true
7982
a readwrite RESTORE true
8083
a readwrite ZONECONFIG true
8184
a test-user BACKUP true
85+
a test-user CHANGEFEED true
8286
a test-user CREATE true
8387
a test-user DROP true
8488
a test-user RESTORE true
@@ -93,12 +97,14 @@ SHOW GRANTS ON DATABASE a
9397
a admin ALL true
9498
a public CONNECT false
9599
a readwrite BACKUP true
100+
a readwrite CHANGEFEED true
96101
a readwrite CREATE true
97102
a readwrite DROP true
98103
a readwrite RESTORE true
99104
a readwrite ZONECONFIG true
100105
a root ALL true
101106
a test-user BACKUP true
107+
a test-user CHANGEFEED true
102108
a test-user DROP true
103109
a test-user RESTORE true
104110
a test-user ZONECONFIG true
@@ -111,6 +117,7 @@ SHOW GRANTS ON DATABASE a FOR readwrite, "test-user"
111117
----
112118
a public CONNECT false
113119
a readwrite BACKUP true
120+
a readwrite CHANGEFEED true
114121
a readwrite CREATE true
115122
a readwrite DROP true
116123
a readwrite RESTORE true

pkg/sql/privilege/privilege.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ var (
8686
ReadData = List{SELECT}
8787
ReadWriteData = List{SELECT, INSERT, DELETE, UPDATE}
8888
ReadWriteSequenceData = List{SELECT, UPDATE, USAGE}
89-
DBPrivileges = List{ALL, BACKUP, CONNECT, CREATE, DROP, RESTORE, ZONECONFIG}
89+
DBPrivileges = List{ALL, BACKUP, CHANGEFEED, CONNECT, CREATE, DROP, RESTORE, ZONECONFIG}
9090
TablePrivileges = List{ALL, BACKUP, CHANGEFEED, CREATE, DROP, SELECT, INSERT, DELETE, UPDATE, ZONECONFIG, TRIGGER, REPLICATIONDEST, REPLICATIONSOURCE}
91-
SchemaPrivileges = List{ALL, CREATE, USAGE}
91+
SchemaPrivileges = List{ALL, CREATE, CHANGEFEED, USAGE}
9292
TypePrivileges = List{ALL, USAGE}
9393
RoutinePrivileges = List{ALL, EXECUTE}
9494
// SequencePrivileges is appended with TablePrivileges as well. This is because

0 commit comments

Comments
 (0)