@@ -311,7 +311,7 @@ func checkUnsafeErr(t *testing.T, err error) {
311
311
t .Fatal ("expected unsafe access error, got" , err )
312
312
}
313
313
314
- func TestCheckUnsafeSystemAccess (t * testing.T ) {
314
+ func TestCheckUnsafeInternalsAccess (t * testing.T ) {
315
315
defer leaktest .AfterTest (t )()
316
316
defer log .Scope (t ).Close (t )
317
317
@@ -321,92 +321,105 @@ func TestCheckUnsafeSystemAccess(t *testing.T) {
321
321
})
322
322
defer s .Stopper ().Stop (ctx )
323
323
324
- q := "SELECT * FROM system.namespace"
325
-
326
- t .Run ("as an external querier" , func (t * testing.T ) {
327
- for _ , test := range []struct {
328
- AllowUnsafeInternals bool
329
- Passes bool
330
- }{
331
- {AllowUnsafeInternals : false , Passes : false },
332
- {AllowUnsafeInternals : true , Passes : true },
333
- } {
334
- t .Run (fmt .Sprintf ("%t" , test ), func (t * testing.T ) {
335
- conn := s .SQLConn (t )
336
- _ , err := conn .Exec ("SET allow_unsafe_internals = $1" , test .AllowUnsafeInternals )
337
- require .NoError (t , err )
338
-
339
- _ , err = conn .Query (q )
340
- if test .Passes {
324
+ t .Run ("accessing the system database" , func (t * testing.T ) {
325
+ q := "SELECT * FROM system.namespace"
326
+
327
+ t .Run ("as an external querier" , func (t * testing.T ) {
328
+ for _ , test := range []struct {
329
+ AllowUnsafeInternals bool
330
+ Passes bool
331
+ }{
332
+ {AllowUnsafeInternals : false , Passes : false },
333
+ {AllowUnsafeInternals : true , Passes : true },
334
+ } {
335
+ t .Run (fmt .Sprintf ("%t" , test ), func (t * testing.T ) {
336
+ conn := s .SQLConn (t )
337
+ _ , err := conn .Exec ("SET allow_unsafe_internals = $1" , test .AllowUnsafeInternals )
341
338
require .NoError (t , err )
342
- } else {
343
- checkUnsafeErr (t , err )
344
- }
345
- })
346
- }
347
- })
348
339
349
- t .Run ("as an internal querier" , func (t * testing.T ) {
350
- for _ , test := range []struct {
351
- AllowUnsafeInternals bool
352
- Passes bool
353
- }{
354
- {AllowUnsafeInternals : false , Passes : true },
355
- {AllowUnsafeInternals : true , Passes : true },
356
- } {
357
- t .Run (fmt .Sprintf ("%t" , test ), func (t * testing.T ) {
358
- idb := s .InternalDB ().(isql.DB )
359
- err := idb .Txn (ctx , func (ctx context.Context , txn isql.Txn ) error {
360
- txn .SessionData ().LocalOnlySessionData .AllowUnsafeInternals = test .AllowUnsafeInternals
361
-
362
- _ , err := txn .QueryBuffered (ctx , "internal-query" , txn .KV (), q )
363
- return err
340
+ _ , err = conn .Query (q )
341
+ if test .Passes {
342
+ require .NoError (t , err )
343
+ } else {
344
+ checkUnsafeErr (t , err )
345
+ }
364
346
})
347
+ }
348
+ })
365
349
366
- require .NoError (t , err )
350
+ t .Run ("as an internal querier" , func (t * testing.T ) {
351
+ for _ , test := range []struct {
352
+ AllowUnsafeInternals bool
353
+ Passes bool
354
+ }{
355
+ {AllowUnsafeInternals : false , Passes : true },
356
+ {AllowUnsafeInternals : true , Passes : true },
357
+ } {
358
+ t .Run (fmt .Sprintf ("%t" , test ), func (t * testing.T ) {
359
+ idb := s .InternalDB ().(isql.DB )
360
+ err := idb .Txn (ctx , func (ctx context.Context , txn isql.Txn ) error {
361
+ txn .SessionData ().LocalOnlySessionData .AllowUnsafeInternals = test .AllowUnsafeInternals
362
+
363
+ _ , err := txn .QueryBuffered (ctx , "internal-query" , txn .KV (), q )
364
+ return err
365
+ })
367
366
368
- if test .Passes {
369
367
require .NoError (t , err )
370
- } else {
371
- checkUnsafeErr (t , err )
372
- }
373
- })
374
- }
375
- })
376
-
377
- }
378
-
379
- func TestCheckUnsafeCRDBInternalAccess (t * testing.T ) {
380
- defer leaktest .AfterTest (t )()
381
- defer log .Scope (t ).Close (t )
382
368
383
- ctx := context .Background ()
384
- s := serverutils .StartServerOnly (t , base.TestServerArgs {
385
- DefaultTestTenant : base .TestControlsTenantsExplicitly ,
369
+ if test .Passes {
370
+ require .NoError (t , err )
371
+ } else {
372
+ checkUnsafeErr (t , err )
373
+ }
374
+ })
375
+ }
376
+ })
386
377
})
387
- defer s .Stopper ().Stop (ctx )
388
378
389
- // Test that with allow_unsafe_internals = false:
390
- // - Supported tables (zones) are allowed
391
- // - Unsupported tables (gossip_alerts) are denied
379
+ t .Run ("accessing the crdb_internal schema" , func (t * testing.T ) {
380
+ t .Run ("supported table allowed" , func (t * testing.T ) {
381
+ conn := s .SQLConn (t )
382
+ _ , err := conn .Exec ("SET allow_unsafe_internals = false" )
383
+ require .NoError (t , err )
392
384
393
- t . Run ( "supported table allowed" , func ( t * testing. T ) {
394
- conn := s . SQLConn ( t )
395
- _ , err := conn . Exec ( "SET allow_unsafe_internals = false" )
396
- require . NoError ( t , err )
385
+ // Supported crdb_internal tables should be allowed even when allow_unsafe_internals = false
386
+ _ , err = conn . Query ( "SELECT * FROM crdb_internal.zones" )
387
+ require . NoError ( t , err , "supported crdb_internal table (zones) should be accessible when allow_unsafe_internals = false" )
388
+ } )
397
389
398
- // Supported crdb_internal tables should be allowed even when allow_unsafe_internals = false
399
- _ , err = conn .Query ("SELECT * FROM crdb_internal.zones" )
400
- require .NoError (t , err , "supported crdb_internal table (zones) should be accessible when allow_unsafe_internals = false" )
390
+ t .Run ("unsupported table denied" , func (t * testing.T ) {
391
+ conn := s .SQLConn (t )
392
+ _ , err := conn .Exec ("SET allow_unsafe_internals = false" )
393
+ require .NoError (t , err )
394
+
395
+ // Unsupported crdb_internal tables should be denied when allow_unsafe_internals = false
396
+ _ , err = conn .Query ("SELECT * FROM crdb_internal.gossip_alerts" )
397
+ checkUnsafeErr (t , err )
398
+ })
401
399
})
402
400
403
- t .Run ("unsupported table denied" , func (t * testing.T ) {
404
- conn := s .SQLConn (t )
405
- _ , err := conn .Exec ("SET allow_unsafe_internals = false" )
406
- require .NoError (t , err )
401
+ // The functionality for this lies in the pkg/sql/optbuilder/scalar.go
402
+ // file, but it is tested here as that package does not setup a test
403
+ // server.
404
+ t .Run ("accessing crdb_internal builtins" , func (t * testing.T ) {
405
+ t .Run ("non crdb_internal builtin allowed" , func (t * testing.T ) {
406
+ conn := s .SQLConn (t )
407
+ _ , err := conn .Exec ("SET allow_unsafe_internals = false" )
408
+ require .NoError (t , err )
409
+
410
+ // Non crdb_internal tables should be allowed.
411
+ _ , err = conn .Query ("SELECT * FROM generate_series(1,5)" )
412
+ require .NoError (t , err )
413
+ })
414
+
415
+ t .Run ("crdb_internal builtin not allowed" , func (t * testing.T ) {
416
+ conn := s .SQLConn (t )
417
+ _ , err := conn .Exec ("SET allow_unsafe_internals = false" )
418
+ require .NoError (t , err )
407
419
408
- // Unsupported crdb_internal tables should be denied when allow_unsafe_internals = false
409
- _ , err = conn .Query ("SELECT * FROM crdb_internal.gossip_alerts" )
410
- checkUnsafeErr (t , err )
420
+ // Unsupported crdb_internal builtins should be denied.
421
+ _ , err = conn .Query ("SELECT * FROM crdb_internal.tenant_span_stats()" )
422
+ checkUnsafeErr (t , err )
423
+ })
411
424
})
412
425
}
0 commit comments