gratan 0.2.8.beta3 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +3 -2
- data/lib/gratan/driver.rb +8 -1
- data/lib/gratan/version.rb +1 -1
- data/spec/change/change_grants_func_prcd_spec.rb +94 -0
- data/spec/create/create_user_with_func_prcd_spec.rb +59 -0
- data/spec/export/export_func_prcd_spec.rb +69 -0
- data/spec/spec_helper.rb +34 -0
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26d81b1a5184f5c95e9002747d235beaad84f713
|
4
|
+
data.tar.gz: e0b0e91ac5d80e0c8aadbfc5e193b3c80629db08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 856c82cf61377fa8b5c050ba1be616dd195a2c27591aebabadcc60ed190f920d1e50fef0d08b9a518afd456a3e2c45e630f4c09a7dd01f433283a01bab32682c
|
7
|
+
data.tar.gz: ceffb3c590345308b87a92d48f4065c4cebb8d9ea27d4be65d6c344fc611697ce1d6ebe642ecc51f37054c105991a99d05cd4fd47307a5b69b4d754472714a82
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ It defines the state of MySQL permissions using Ruby DSL, and updates permission
|
|
6
6
|
|
7
7
|
[](http://badge.fury.io/rb/gratan)
|
8
8
|
[](https://travis-ci.org/winebarrel/gratan)
|
9
|
-
[](https://coveralls.io/r/winebarrel/gratan?branch=master)
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
@@ -56,6 +56,7 @@ Usage: gratan [options]
|
|
56
56
|
--ignore-object REGEXP
|
57
57
|
--enable-expired
|
58
58
|
--ignore-not-exist
|
59
|
+
--skip-disable-log-bin
|
59
60
|
--no-color
|
60
61
|
--debug
|
61
62
|
--auto-identify OUTPUT
|
@@ -73,7 +74,7 @@ user "scott", "%" do
|
|
73
74
|
grant "USAGE"
|
74
75
|
end
|
75
76
|
|
76
|
-
on "test.*", expired: '2014/10/08' do
|
77
|
+
on "test.*", expired: '2014/10/08', identified: "PASSWORD '*ABCDEF'" do
|
77
78
|
grant "SELECT"
|
78
79
|
grant "INSERT"
|
79
80
|
end
|
data/lib/gratan/driver.rb
CHANGED
@@ -207,7 +207,14 @@ class Gratan::Driver
|
|
207
207
|
end
|
208
208
|
|
209
209
|
def quote_object(object)
|
210
|
-
object
|
210
|
+
if object =~ /\A(FUNCTION|PROCEDURE)\s+/i
|
211
|
+
object_type, object = object.split(/\s+/, 2)
|
212
|
+
object_type << ' '
|
213
|
+
else
|
214
|
+
object_type = ''
|
215
|
+
end
|
216
|
+
|
217
|
+
object_type + object.split('.', 2).map {|i| i == '*' ? i : "`#{i}`" }.join('.')
|
211
218
|
end
|
212
219
|
|
213
220
|
def quote_identifier(identifier)
|
data/lib/gratan/version.rb
CHANGED
@@ -0,0 +1,94 @@
|
|
1
|
+
describe 'Gratan::Client#apply' do
|
2
|
+
before(:each) do
|
3
|
+
mysql do |cli|
|
4
|
+
drop_database(cli)
|
5
|
+
create_database(cli)
|
6
|
+
create_function(cli, :my_func)
|
7
|
+
create_procedure(cli, :my_prcd)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when func -> prcd' do
|
12
|
+
subject { client }
|
13
|
+
|
14
|
+
before do
|
15
|
+
apply(subject) {
|
16
|
+
<<-RUBY
|
17
|
+
user "scott", "%" do
|
18
|
+
on "*.*" do
|
19
|
+
grant "USAGE"
|
20
|
+
end
|
21
|
+
|
22
|
+
on "FUNCTION #{TEST_DATABASE}.my_func" do
|
23
|
+
grant "EXECUTE"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
RUBY
|
27
|
+
}
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
it do
|
32
|
+
apply(subject) {
|
33
|
+
<<-RUBY
|
34
|
+
user "scott", "%" do
|
35
|
+
on "*.*" do
|
36
|
+
grant "USAGE"
|
37
|
+
end
|
38
|
+
|
39
|
+
on "PROCEDURE #{TEST_DATABASE}.my_prcd" do
|
40
|
+
grant "EXECUTE"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
RUBY
|
44
|
+
}
|
45
|
+
|
46
|
+
expect(show_grants).to match_array [
|
47
|
+
"GRANT USAGE ON *.* TO 'scott'@'%'",
|
48
|
+
"GRANT EXECUTE ON PROCEDURE `#{TEST_DATABASE}`.`my_prcd` TO 'scott'@'%'"
|
49
|
+
]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when prcd -> func' do
|
54
|
+
subject { client }
|
55
|
+
|
56
|
+
before do
|
57
|
+
apply(subject) {
|
58
|
+
<<-RUBY
|
59
|
+
user "scott", "%" do
|
60
|
+
on "*.*" do
|
61
|
+
grant "USAGE"
|
62
|
+
end
|
63
|
+
|
64
|
+
on "PROCEDURE #{TEST_DATABASE}.my_prcd" do
|
65
|
+
grant "EXECUTE"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
RUBY
|
69
|
+
}
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
it do
|
74
|
+
apply(subject) {
|
75
|
+
<<-RUBY
|
76
|
+
user "scott", "%" do
|
77
|
+
on "*.*" do
|
78
|
+
grant "USAGE"
|
79
|
+
end
|
80
|
+
|
81
|
+
on "FUNCTION #{TEST_DATABASE}.my_func" do
|
82
|
+
grant "EXECUTE"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
RUBY
|
86
|
+
}
|
87
|
+
|
88
|
+
expect(show_grants).to match_array [
|
89
|
+
"GRANT USAGE ON *.* TO 'scott'@'%'",
|
90
|
+
"GRANT EXECUTE ON FUNCTION `#{TEST_DATABASE}`.`my_func` TO 'scott'@'%'"
|
91
|
+
]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
describe 'Gratan::Client#apply' do
|
2
|
+
context 'when create user with function' do
|
3
|
+
subject { client }
|
4
|
+
|
5
|
+
it do
|
6
|
+
create_functions(:foo) do
|
7
|
+
result = apply(subject) {
|
8
|
+
<<-RUBY
|
9
|
+
user 'scott', 'localhost' do
|
10
|
+
on '*.*' do
|
11
|
+
grant 'USAGE'
|
12
|
+
end
|
13
|
+
|
14
|
+
on 'FUNCTION #{TEST_DATABASE}.foo' do
|
15
|
+
grant 'EXECUTE'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
RUBY
|
19
|
+
}
|
20
|
+
|
21
|
+
expect(result).to be_truthy
|
22
|
+
|
23
|
+
expect(show_grants).to match_array [
|
24
|
+
"GRANT USAGE ON *.* TO 'scott'@'localhost'",
|
25
|
+
"GRANT EXECUTE ON FUNCTION `#{TEST_DATABASE}`.`foo` TO 'scott'@'localhost'"
|
26
|
+
]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when create user with procedure' do
|
32
|
+
subject { client }
|
33
|
+
|
34
|
+
it do
|
35
|
+
create_procedures(:foo) do
|
36
|
+
result = apply(subject) {
|
37
|
+
<<-RUBY
|
38
|
+
user 'scott', 'localhost' do
|
39
|
+
on '*.*' do
|
40
|
+
grant 'USAGE'
|
41
|
+
end
|
42
|
+
|
43
|
+
on 'PROCEDURE #{TEST_DATABASE}.foo' do
|
44
|
+
grant 'EXECUTE'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
RUBY
|
48
|
+
}
|
49
|
+
|
50
|
+
expect(result).to be_truthy
|
51
|
+
|
52
|
+
expect(show_grants).to match_array [
|
53
|
+
"GRANT USAGE ON *.* TO 'scott'@'localhost'",
|
54
|
+
"GRANT EXECUTE ON PROCEDURE `#{TEST_DATABASE}`.`foo` TO 'scott'@'localhost'"
|
55
|
+
]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
describe 'Gratan::Client#export' do
|
2
|
+
context 'when function exists' do
|
3
|
+
let(:grantfile) {
|
4
|
+
<<-RUBY
|
5
|
+
user "scott", "%" do
|
6
|
+
on "*.*" do
|
7
|
+
grant "USAGE"
|
8
|
+
end
|
9
|
+
|
10
|
+
on "FUNCTION #{TEST_DATABASE}.my_func" do
|
11
|
+
grant "EXECUTE"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
RUBY
|
15
|
+
}
|
16
|
+
|
17
|
+
subject { client }
|
18
|
+
|
19
|
+
before do
|
20
|
+
mysql do |cli|
|
21
|
+
drop_database(cli)
|
22
|
+
create_database(cli)
|
23
|
+
create_function(cli, :my_func)
|
24
|
+
end
|
25
|
+
|
26
|
+
apply(subject) do
|
27
|
+
grantfile
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it do
|
32
|
+
expect(subject.export.strip).to eq grantfile.strip
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when procedure exists' do
|
37
|
+
let(:grantfile) {
|
38
|
+
<<-RUBY
|
39
|
+
user "scott", "%" do
|
40
|
+
on "*.*" do
|
41
|
+
grant "USAGE"
|
42
|
+
end
|
43
|
+
|
44
|
+
on "PROCEDURE #{TEST_DATABASE}.my_prcd" do
|
45
|
+
grant "EXECUTE"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
RUBY
|
49
|
+
}
|
50
|
+
|
51
|
+
subject { client }
|
52
|
+
|
53
|
+
before do
|
54
|
+
mysql do |cli|
|
55
|
+
drop_database(cli)
|
56
|
+
create_database(cli)
|
57
|
+
create_procedure(cli, :my_prcd)
|
58
|
+
end
|
59
|
+
|
60
|
+
apply(subject) do
|
61
|
+
grantfile
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it do
|
66
|
+
expect(subject.export.strip).to eq grantfile.strip
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -49,6 +49,14 @@ def create_table(client, table)
|
|
49
49
|
client.query("CREATE TABLE #{TEST_DATABASE}.#{table} (id INT)")
|
50
50
|
end
|
51
51
|
|
52
|
+
def create_function(client, func)
|
53
|
+
client.query("CREATE FUNCTION #{TEST_DATABASE}.#{func}() RETURNS INT RETURN 1")
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_procedure(client, prcd)
|
57
|
+
client.query("CREATE PROCEDURE #{TEST_DATABASE}.#{prcd}() SELECT 1")
|
58
|
+
end
|
59
|
+
|
52
60
|
def create_tables(*tables)
|
53
61
|
mysql do |client|
|
54
62
|
begin
|
@@ -62,6 +70,32 @@ def create_tables(*tables)
|
|
62
70
|
end
|
63
71
|
end
|
64
72
|
|
73
|
+
def create_functions(*funcs)
|
74
|
+
mysql do |client|
|
75
|
+
begin
|
76
|
+
drop_database(client)
|
77
|
+
create_database(client)
|
78
|
+
funcs.each {|i| create_function(client, i) }
|
79
|
+
yield
|
80
|
+
ensure
|
81
|
+
drop_database(client)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def create_procedures(*prcds)
|
87
|
+
mysql do |client|
|
88
|
+
begin
|
89
|
+
drop_database(client)
|
90
|
+
create_database(client)
|
91
|
+
prcds.each {|i| create_procedure(client, i) }
|
92
|
+
yield
|
93
|
+
ensure
|
94
|
+
drop_database(client)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
65
99
|
def select_users(client)
|
66
100
|
users = []
|
67
101
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gratan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.8
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- spec/change/change_grants_3_spec.rb
|
162
162
|
- spec/change/change_grants_4_spec.rb
|
163
163
|
- spec/change/change_grants_expired_spec.rb
|
164
|
+
- spec/change/change_grants_func_prcd_spec.rb
|
164
165
|
- spec/change/change_grants_ignore_not_exist_spec.rb
|
165
166
|
- spec/change/change_grants_multi_hosts_spec.rb
|
166
167
|
- spec/change/change_grants_regexp_spec.rb
|
@@ -173,11 +174,13 @@ files:
|
|
173
174
|
- spec/create/create_user_regexp_spec.rb
|
174
175
|
- spec/create/create_user_spec.rb
|
175
176
|
- spec/create/create_user_target_spec.rb
|
177
|
+
- spec/create/create_user_with_func_prcd_spec.rb
|
176
178
|
- spec/create/create_user_with_ignore_object_spec.rb
|
177
179
|
- spec/drop/drop_user_2_spec.rb
|
178
180
|
- spec/drop/drop_user_spec.rb
|
179
181
|
- spec/drop/expire_user_spec.rb
|
180
182
|
- spec/export/export_chunk_spec.rb
|
183
|
+
- spec/export/export_func_prcd_spec.rb
|
181
184
|
- spec/export/export_spec.rb
|
182
185
|
- spec/export/export_with_ignore_object_spec.rb
|
183
186
|
- spec/misc/misc_spec.rb
|
@@ -198,9 +201,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
201
|
version: '0'
|
199
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
203
|
requirements:
|
201
|
-
- - '
|
204
|
+
- - '>='
|
202
205
|
- !ruby/object:Gem::Version
|
203
|
-
version:
|
206
|
+
version: '0'
|
204
207
|
requirements: []
|
205
208
|
rubyforge_project:
|
206
209
|
rubygems_version: 2.0.14
|
@@ -212,6 +215,7 @@ test_files:
|
|
212
215
|
- spec/change/change_grants_3_spec.rb
|
213
216
|
- spec/change/change_grants_4_spec.rb
|
214
217
|
- spec/change/change_grants_expired_spec.rb
|
218
|
+
- spec/change/change_grants_func_prcd_spec.rb
|
215
219
|
- spec/change/change_grants_ignore_not_exist_spec.rb
|
216
220
|
- spec/change/change_grants_multi_hosts_spec.rb
|
217
221
|
- spec/change/change_grants_regexp_spec.rb
|
@@ -224,11 +228,13 @@ test_files:
|
|
224
228
|
- spec/create/create_user_regexp_spec.rb
|
225
229
|
- spec/create/create_user_spec.rb
|
226
230
|
- spec/create/create_user_target_spec.rb
|
231
|
+
- spec/create/create_user_with_func_prcd_spec.rb
|
227
232
|
- spec/create/create_user_with_ignore_object_spec.rb
|
228
233
|
- spec/drop/drop_user_2_spec.rb
|
229
234
|
- spec/drop/drop_user_spec.rb
|
230
235
|
- spec/drop/expire_user_spec.rb
|
231
236
|
- spec/export/export_chunk_spec.rb
|
237
|
+
- spec/export/export_func_prcd_spec.rb
|
232
238
|
- spec/export/export_spec.rb
|
233
239
|
- spec/export/export_with_ignore_object_spec.rb
|
234
240
|
- spec/misc/misc_spec.rb
|