File tree 3 files changed +117
-0
lines changed
src/box/lua/config/applier
3 files changed +117
-0
lines changed Original file line number Diff line number Diff line change
1
+ ## feature/config
2
+
3
+ * Implemented revoking of non-default privileges for default
4
+ users and roles (gh-8967 ).
Original file line number Diff line number Diff line change @@ -493,6 +493,28 @@ local function apply(config)
493
493
return
494
494
end
495
495
496
+ -- Now the credentials config should be enriched with empty configs
497
+ -- for roles and users that are present by default on every instance:
498
+ -- - - super
499
+ -- - public
500
+ -- - replication
501
+ -- - - guest
502
+ -- - admin
503
+ --
504
+ -- It is done to revoke all non-default privileges for this roles and
505
+ -- users if they are not present in config. Otherwise, the privileges
506
+ -- will be synced as usual.
507
+
508
+ credentials .roles = credentials .roles or {}
509
+ credentials .roles [' super' ] = credentials .roles [' super' ] or {}
510
+ credentials .roles [' public' ] = credentials .roles [' public' ] or {}
511
+ credentials .roles [' replication' ] = credentials .roles [' replication' ] or {}
512
+
513
+ credentials .users = credentials .users or {}
514
+ credentials .users [' guest' ] = credentials .users [' guest' ] or {}
515
+ credentials .users [' admin' ] = credentials .users [' admin' ] or {}
516
+
517
+ -- Create roles and users and synchronise privileges for them.
496
518
create_roles (credentials .roles )
497
519
create_users (credentials .users )
498
520
end
Original file line number Diff line number Diff line change @@ -636,3 +636,94 @@ g.test_remove_user_role = function(g)
636
636
verify_2 = verify ,
637
637
})
638
638
end
639
+
640
+ g .test_restore_defaults_for_default_user = function (g )
641
+ -- Verify that if the default users and roles are not present in config
642
+ -- their excessive privileges are revoked (restored to built-in defaults).
643
+
644
+ helpers .reload_success_case (g , {
645
+ options = {
646
+ credentials = {
647
+ roles = {
648
+ dummy = { },
649
+ super = {
650
+ roles = { ' dummy' },
651
+ },
652
+ public = {
653
+ roles = { ' dummy' },
654
+ },
655
+ replication = {
656
+ roles = { ' dummy' },
657
+ },
658
+ },
659
+ users = {
660
+ guest = {
661
+ roles = { ' super' , ' dummy' }
662
+ },
663
+ admin = {
664
+ roles = { ' dummy' }
665
+ },
666
+ }
667
+ }
668
+ },
669
+ verify = function ()
670
+ local internal =
671
+ require (' internal.config.applier.credentials' )._internal
672
+
673
+ local default_identities = {{
674
+ ' user' , ' admin' ,
675
+ }, {
676
+ ' user' , ' guest' ,
677
+ }, {
678
+ ' role' , ' super' ,
679
+ }, {
680
+ ' role' , ' public' ,
681
+ }, {
682
+ ' role' , ' replication' ,
683
+ },}
684
+
685
+ for _ , id in ipairs (default_identities ) do
686
+ local user_or_role , name = unpack (id )
687
+
688
+ local perm = box .schema [user_or_role ].info (name )
689
+ perm = internal .privileges_from_box (perm )
690
+
691
+ t .assert_equals (perm [' role' ][' dummy' ], {execute = true })
692
+ end
693
+ end ,
694
+ options_2 = {
695
+ credentials = {
696
+ users = {
697
+ guest = {
698
+ roles = { ' super' }
699
+ }
700
+ }
701
+ }
702
+ },
703
+ verify_2 = function ()
704
+ local internal =
705
+ require (' internal.config.applier.credentials' )._internal
706
+
707
+ local default_identities = {{
708
+ ' user' , ' admin' ,
709
+ }, {
710
+ ' user' , ' guest' ,
711
+ }, {
712
+ ' role' , ' super' ,
713
+ }, {
714
+ ' role' , ' public' ,
715
+ }, {
716
+ ' role' , ' replication' ,
717
+ },}
718
+
719
+ for _ , id in ipairs (default_identities ) do
720
+ local user_or_role , name = unpack (id )
721
+
722
+ local perm = box .schema [user_or_role ].info (name )
723
+ perm = internal .privileges_from_box (perm )
724
+
725
+ t .assert_not_equals (perm [' role' ][' dummy' ], {execute = true })
726
+ end
727
+ end ,
728
+ })
729
+ end
You can’t perform that action at this time.
0 commit comments