|
6 | 6 | context 'validation errors' do
|
7 | 7 | include_context 'manifests' do
|
8 | 8 | let(:title) { 'myTitle' }
|
9 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-SELECT' } |
| 9 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
10 | 10 | end
|
11 | 11 | context 'user =>' do
|
12 | 12 | let(:params) { {
|
|
24 | 24 | end
|
25 | 25 | describe 'over limit' do
|
26 | 26 | let(:additional_params) { {:user => random_string_of_size(129)} }
|
| 27 | + it_behaves_like 'validation error' |
27 | 28 | end
|
28 | 29 | end
|
29 | 30 | context 'permission' do
|
|
57 | 58 | it_behaves_like 'validation error'
|
58 | 59 | end
|
59 | 60 | end
|
| 61 | + context 'with_grant_option => ' do |
| 62 | + let(:params) { { |
| 63 | + :permission => 'SELECT', |
| 64 | + :database => 'loggingDb', |
| 65 | + :user => 'loggingUser', |
| 66 | + |
| 67 | + } } |
| 68 | + describe 'true AND state => DENY' do |
| 69 | + let(:additional_params) { {:with_grant_option => true, :state => 'DENY'} } |
| 70 | + let(:raise_error_check) { "Can not use with_grant_option and state DENY, must be 'GRANT' " } |
| 71 | + it_behaves_like 'validation error' |
| 72 | + end |
| 73 | + describe 'invalid' do |
| 74 | + let(:additional_params) { {:with_grant_option => 'invalid'} } |
| 75 | + let(:raise_error_check) { '"invalid" is not a boolean' } |
| 76 | + it_behaves_like 'validation error' |
| 77 | + end |
| 78 | + end |
60 | 79 | end
|
61 | 80 | context 'successfully' do
|
62 | 81 | include_context 'manifests' do
|
63 | 82 | let(:title) { 'myTitle' }
|
64 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-SELECT' } |
| 83 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
65 | 84 | let(:params) { {
|
66 | 85 | :user => 'loggingUser',
|
67 | 86 | :permission => 'SELECT',
|
|
70 | 89 | end
|
71 | 90 | %w(revoke grant deny).each do |state|
|
72 | 91 | context "state => '#{state}'" do
|
73 |
| - let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-#{state.upcase}-SELECT" } |
| 92 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
74 | 93 | let(:should_contain_command) { ["#{state.upcase} SELECT TO [loggingUser];", 'USE [loggingDb];'] }
|
75 | 94 | describe "lowercase #{state}" do
|
76 | 95 | let(:additional_params) { {:state => state} }
|
|
88 | 107 | describe 'upper limit' do
|
89 | 108 | permission =random_string_of_size(128, false)
|
90 | 109 | let(:additional_params) { {:permission => permission} }
|
91 |
| - let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-#{permission.upcase}" } |
| 110 | + let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-#{permission.upcase}" } |
92 | 111 | let(:should_contain_command) { ['USE [loggingDb];'] }
|
93 | 112 | it_behaves_like 'sqlserver_tsql command'
|
94 | 113 | end
|
95 | 114 | describe 'alter' do
|
96 | 115 | let(:additional_params) { {:permission => 'ALTER'} }
|
97 | 116 | let(:should_contain_command) { ['USE [loggingDb];', 'GRANT ALTER TO [loggingUser];'] }
|
98 |
| - let(:sqlserver_tsql_title) { "user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-ALTER" } |
| 117 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-ALTER' } |
99 | 118 | it_behaves_like 'sqlserver_tsql command'
|
100 | 119 | end
|
101 | 120 | end
|
|
110 | 129 | it_behaves_like 'compile'
|
111 | 130 | end
|
112 | 131 |
|
| 132 | + context 'with_grant_option =>' do |
| 133 | + describe 'true' do |
| 134 | + let(:additional_params) { {:with_grant_option => true} } |
| 135 | + let(:should_contain_command) { [ |
| 136 | + "IF @perm_state != 'GRANT_WITH_GRANT_OPTION'", |
| 137 | + 'GRANT SELECT TO [loggingUser] WITH GRANT OPTION;', |
| 138 | + ] } |
| 139 | + let(:should_not_contain_command) { [ |
| 140 | + 'REVOKE GRANT OPTION FOR SELECT FROM [loggingUser];'] } |
| 141 | + let(:should_contain_onlyif) { ["IF @perm_state != 'GRANT_WITH_GRANT_OPTION'",] } |
| 142 | + it_behaves_like 'sqlserver_tsql command' |
| 143 | + it_behaves_like 'sqlserver_tsql without_command' |
| 144 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 145 | + end |
| 146 | + describe 'false' do |
| 147 | + let(:should_contain_command) { [ |
| 148 | + "IF @perm_state != 'GRANT'", |
| 149 | + 'GRANT SELECT TO [loggingUser];', |
| 150 | + 'REVOKE GRANT OPTION FOR SELECT TO [loggingUser] CASCADE;', |
| 151 | + "IF 'GRANT_WITH_GRANT_OPTION' = ISNULL(", |
| 152 | + ] } |
| 153 | + |
| 154 | + let(:should_contain_onlyif) { ["IF @perm_state != 'GRANT'",] } |
| 155 | + it_behaves_like 'sqlserver_tsql command' |
| 156 | + it_behaves_like 'sqlserver_tsql onlyif' |
| 157 | + end |
| 158 | + end |
113 | 159 | end
|
114 | 160 |
|
115 | 161 | context 'command syntax' do
|
116 | 162 | include_context 'manifests' do
|
117 | 163 | let(:title) { 'myTitle' }
|
118 |
| - let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-GRANT-SELECT' } |
| 164 | + let(:sqlserver_tsql_title) { 'user-permissions-MSSQLSERVER-loggingDb-loggingUser-SELECT' } |
119 | 165 | let(:params) { {
|
120 | 166 | :user => 'loggingUser',
|
121 | 167 | :permission => 'SELECT',
|
|
128 | 174 | /DECLARE @perm_state varchar\(250\)/,
|
129 | 175 | /SET @perm_state = ISNULL\(\n\s+\(SELECT perm.state_desc FROM sys\.database_principals princ\n\s+JOIN sys\./,
|
130 | 176 | /JOIN sys\.database_permissions perm ON perm\.grantee_principal_id = princ.principal_id\n\s+WHERE/,
|
131 |
| - /WHERE princ\.type in \('U','S','G'\) AND name = 'loggingUser' AND permission_name = 'SELECT' \),\n\s+'REVOKE'\);/, |
| 177 | + /WHERE princ\.type in \('U','S','G'\) AND name = 'loggingUser' AND permission_name = 'SELECT'\),\n\s+'REVOKE'\)\s+;/, |
132 | 178 | /DECLARE @error_msg varchar\(250\);\nSET @error_msg = 'EXPECTED user \[loggingUser\] to have permission \[SELECT\] with GRANT but got ' \+ @perm_state;/,
|
133 | 179 | /IF @perm_state != 'GRANT'\n\s+THROW 51000, @error_msg, 10/
|
134 | 180 | ] }
|
|
0 commit comments