gratan 0.2.3 → 0.2.4
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/README.md +1 -0
- data/bin/gratan +19 -18
- data/lib/gratan/driver.rb +11 -1
- data/lib/gratan/version.rb +1 -1
- data/spec/change/change_grants_ignore_not_exist_spec.rb +96 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e05682c907c1fe62bbe627e89029656293f73cee
|
4
|
+
data.tar.gz: 4fc1a578ad94f8acbf50bfc006a2187bffb53ec8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3c03ecaa3d3f4d4b17778e1ea324e62ad50eaccad230fb5bacea75b4b9b6e80cabd7e904138db0f227120685ebe2565c01c8c41587921c4b6b592b30f7f239c
|
7
|
+
data.tar.gz: e2b836e3061aeeb482a7e879578670527777b7dd89441020f5b89a4d6503c20f2234a4d28cee1047db390c2e49e857b08502ccfa5198bada0b3b8556cf5e114e
|
data/README.md
CHANGED
data/bin/gratan
CHANGED
@@ -26,24 +26,25 @@ options = {
|
|
26
26
|
|
27
27
|
ARGV.options do |opt|
|
28
28
|
begin
|
29
|
-
opt.on('' , '--host HOST') {|v| mysql_options[:host]
|
30
|
-
opt.on('' , '--port PORT', Integer) {|v| mysql_options[:port]
|
31
|
-
opt.on('' , '--socket SOCKET') {|v| mysql_options[:socket]
|
32
|
-
opt.on('' , '--username USERNAME') {|v| mysql_options[:username]
|
33
|
-
opt.on('' , '--password PASSWORD') {|v| mysql_options[:password]
|
34
|
-
opt.on('' , '--database DATABASE') {|v| mysql_options[:database]
|
35
|
-
opt.on('-a', '--apply') { mode
|
36
|
-
opt.on('-f', '--file FILE') {|v| file
|
37
|
-
opt.on('' , '--dry-run') { options[:dry_run]
|
38
|
-
opt.on('-e', '--export') { mode
|
39
|
-
opt.on('' , '--with-identifier') { options[:with_identifier]
|
40
|
-
opt.on('' , '--split') { split
|
41
|
-
opt.on('-o', '--output FILE') {|v| output_file
|
42
|
-
opt.on('' , '--ignore-user REGEXP') {|v| options[:ignore_user]
|
43
|
-
opt.on('' , '--target-user REGEXP') {|v| options[:target_user]
|
44
|
-
opt.on('' , '--enable-expired') { options[:enable_expired]
|
45
|
-
opt.on('' , '--
|
46
|
-
opt.on('' , '--
|
29
|
+
opt.on('' , '--host HOST') {|v| mysql_options[:host] = v }
|
30
|
+
opt.on('' , '--port PORT', Integer) {|v| mysql_options[:port] = v }
|
31
|
+
opt.on('' , '--socket SOCKET') {|v| mysql_options[:socket] = v }
|
32
|
+
opt.on('' , '--username USERNAME') {|v| mysql_options[:username] = v }
|
33
|
+
opt.on('' , '--password PASSWORD') {|v| mysql_options[:password] = v }
|
34
|
+
opt.on('' , '--database DATABASE') {|v| mysql_options[:database] = v }
|
35
|
+
opt.on('-a', '--apply') { mode = :apply }
|
36
|
+
opt.on('-f', '--file FILE') {|v| file = v }
|
37
|
+
opt.on('' , '--dry-run') { options[:dry_run] = true }
|
38
|
+
opt.on('-e', '--export') { mode = :export }
|
39
|
+
opt.on('' , '--with-identifier') { options[:with_identifier] = true }
|
40
|
+
opt.on('' , '--split') { split = true }
|
41
|
+
opt.on('-o', '--output FILE') {|v| output_file = v }
|
42
|
+
opt.on('' , '--ignore-user REGEXP') {|v| options[:ignore_user] = Regexp.new(v) }
|
43
|
+
opt.on('' , '--target-user REGEXP') {|v| options[:target_user] = Regexp.new(v) }
|
44
|
+
opt.on('' , '--enable-expired') { options[:enable_expired] = true }
|
45
|
+
opt.on('' , '--ignore-not-exist') {|v| options[:ignore_not_exist] = true }
|
46
|
+
opt.on('' , '--no-color') { options[:color] = false }
|
47
|
+
opt.on('' , '--debug') { options[:debug] = true }
|
47
48
|
opt.on('' , '--auto-identify OUTPUT') {|v| options[:identifier] = Gratan::Identifier::Auto.new(v, options) }
|
48
49
|
opt.on('' , '--csv-identify CSV') {|v| options[:identifier] = Gratan::Identifier::CSV.new(v, options) }
|
49
50
|
|
data/lib/gratan/driver.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
class Gratan::Driver
|
2
2
|
include Gratan::Logger::Helper
|
3
3
|
|
4
|
+
ER_NO_SUCH_TABLE = 1146
|
5
|
+
|
4
6
|
def initialize(client, options = {})
|
5
7
|
@client = client
|
6
8
|
@options = options
|
@@ -84,7 +86,15 @@ class Gratan::Driver
|
|
84
86
|
sql << " REQUIRE #{required}" if required
|
85
87
|
sql << " WITH #{with_option}" if with_option
|
86
88
|
|
87
|
-
|
89
|
+
begin
|
90
|
+
update(sql)
|
91
|
+
rescue Mysql2::Error => e
|
92
|
+
if @options[:ignore_not_exist] and e.error_number == ER_NO_SUCH_TABLE
|
93
|
+
log(:warn, e.message, :color => :yellow)
|
94
|
+
else
|
95
|
+
raise e
|
96
|
+
end
|
97
|
+
end
|
88
98
|
end
|
89
99
|
|
90
100
|
def identify(user, host, identifier)
|
data/lib/gratan/version.rb
CHANGED
@@ -0,0 +1,96 @@
|
|
1
|
+
describe 'Gratan::Client#apply' do
|
2
|
+
context 'when grant privs (ignore_not_exist: true)' do
|
3
|
+
let(:logger) do
|
4
|
+
logger = Logger.new('/dev/null')
|
5
|
+
expect(logger).to receive(:warn).with("[WARN] Table 'yamada.taro' doesn't exist")
|
6
|
+
logger
|
7
|
+
end
|
8
|
+
|
9
|
+
subject do
|
10
|
+
client(
|
11
|
+
ignore_not_exist: true,
|
12
|
+
logger: logger
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
before do
|
17
|
+
apply {
|
18
|
+
<<-RUBY
|
19
|
+
user 'scott', 'localhost', identified: 'tiger', required: 'SSL' do
|
20
|
+
on '*.*' do
|
21
|
+
grant 'SELECT'
|
22
|
+
grant 'INSERT'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
RUBY
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
it do
|
30
|
+
apply(subject) {
|
31
|
+
<<-RUBY
|
32
|
+
user 'scott', 'localhost', required: 'SSL' do
|
33
|
+
on '*.*' do
|
34
|
+
grant 'SELECT'
|
35
|
+
grant 'INSERT'
|
36
|
+
grant 'UPDATE'
|
37
|
+
grant 'DELETE'
|
38
|
+
end
|
39
|
+
|
40
|
+
on 'yamada.taro' do
|
41
|
+
grant 'SELECT'
|
42
|
+
grant 'INSERT'
|
43
|
+
grant 'UPDATE'
|
44
|
+
grant 'DELETE'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
RUBY
|
48
|
+
}
|
49
|
+
|
50
|
+
expect(show_grants).to match_array [
|
51
|
+
"GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'scott'@'localhost' IDENTIFIED BY PASSWORD '*F2F68D0BB27A773C1D944270E5FAFED515A3FA40' REQUIRE SSL",
|
52
|
+
]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'when grant privs (ignore_not_exist: false)' do
|
57
|
+
subject { client(ignore_not_exist: false) }
|
58
|
+
|
59
|
+
before do
|
60
|
+
apply {
|
61
|
+
<<-RUBY
|
62
|
+
user 'scott', 'localhost', identified: 'tiger', required: 'SSL' do
|
63
|
+
on '*.*' do
|
64
|
+
grant 'SELECT'
|
65
|
+
grant 'INSERT'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
RUBY
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
it do
|
73
|
+
dsl = <<-RUBY
|
74
|
+
user 'scott', 'localhost', required: 'SSL' do
|
75
|
+
on '*.*' do
|
76
|
+
grant 'SELECT'
|
77
|
+
grant 'INSERT'
|
78
|
+
grant 'UPDATE'
|
79
|
+
grant 'DELETE'
|
80
|
+
end
|
81
|
+
|
82
|
+
on 'yamada.taro' do
|
83
|
+
grant 'SELECT'
|
84
|
+
grant 'INSERT'
|
85
|
+
grant 'UPDATE'
|
86
|
+
grant 'DELETE'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
RUBY
|
90
|
+
|
91
|
+
expect {
|
92
|
+
apply(subject) { dsl }
|
93
|
+
}.to raise_error("Table 'yamada.taro' doesn't exist")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
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.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- spec/change/change_grants_3_spec.rb
|
148
148
|
- spec/change/change_grants_4_spec.rb
|
149
149
|
- spec/change/change_grants_expired_spec.rb
|
150
|
+
- spec/change/change_grants_ignore_not_exist_spec.rb
|
150
151
|
- spec/change/change_grants_multi_hosts_spec.rb
|
151
152
|
- spec/change/change_grants_regexp_spec.rb
|
152
153
|
- spec/change/change_grants_spec.rb
|
@@ -184,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
185
|
version: '0'
|
185
186
|
requirements: []
|
186
187
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.
|
188
|
+
rubygems_version: 2.4.1
|
188
189
|
signing_key:
|
189
190
|
specification_version: 4
|
190
191
|
summary: Gratan is a tool to manage MySQL permissions using Ruby DSL.
|
@@ -193,6 +194,7 @@ test_files:
|
|
193
194
|
- spec/change/change_grants_3_spec.rb
|
194
195
|
- spec/change/change_grants_4_spec.rb
|
195
196
|
- spec/change/change_grants_expired_spec.rb
|
197
|
+
- spec/change/change_grants_ignore_not_exist_spec.rb
|
196
198
|
- spec/change/change_grants_multi_hosts_spec.rb
|
197
199
|
- spec/change/change_grants_regexp_spec.rb
|
198
200
|
- spec/change/change_grants_spec.rb
|