hypershield 0.6.0 → 0.6.1
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/CHANGELOG.md +4 -0
- data/README.md +6 -0
- data/lib/hypershield/version.rb +1 -1
- data/lib/hypershield.rb +32 -7
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b6ecd356af71a6dcfcc090e7a77ff942d4bdedef2da1eaefe194c9b0f92cf7e0
|
|
4
|
+
data.tar.gz: 0f4af74bfe94e4848f0da087a30d0031c2da72b18219fca7e5c5d943c05b37f7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: defa8e62d56cfb81fbf06df39b35d85103d24b2763b14be7f9e711b0867f29c0833a775da5b2f27c5a12a921bf11571dd9e417d0242cb81c71a497197b286585
|
|
7
|
+
data.tar.gz: 3d2e07ddb85d84a80f02cf2a5da12c6b12f98b3e852c4ea7856fbde8f9314cc789f1742c9f978acae831b9195d32866bfa812e59d06d6b0910cbe304d70d4f2d
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -129,6 +129,12 @@ Enable or disable Hypershield in an environment
|
|
|
129
129
|
Hypershield.enabled = Rails.env.production?
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
+
Include materialized views for Postgres
|
|
133
|
+
|
|
134
|
+
```ruby
|
|
135
|
+
Hypershield.materialized_views = true
|
|
136
|
+
```
|
|
137
|
+
|
|
132
138
|
## History
|
|
133
139
|
|
|
134
140
|
View the [changelog](CHANGELOG.md)
|
data/lib/hypershield/version.rb
CHANGED
data/lib/hypershield.rb
CHANGED
|
@@ -10,9 +10,10 @@ require_relative "hypershield/engine" if defined?(Rails)
|
|
|
10
10
|
|
|
11
11
|
module Hypershield
|
|
12
12
|
class << self
|
|
13
|
-
attr_accessor :enabled, :log_sql, :schemas
|
|
13
|
+
attr_accessor :enabled, :materialized_views, :log_sql, :schemas
|
|
14
14
|
end
|
|
15
15
|
self.enabled = true
|
|
16
|
+
self.materialized_views = false
|
|
16
17
|
self.log_sql = false
|
|
17
18
|
self.schemas = {
|
|
18
19
|
hypershield: {
|
|
@@ -107,6 +108,10 @@ module Hypershield
|
|
|
107
108
|
adapter_name.match?(/mysql|trilogy/i)
|
|
108
109
|
end
|
|
109
110
|
|
|
111
|
+
def postgresql?
|
|
112
|
+
adapter_name.match?(/postg/i)
|
|
113
|
+
end
|
|
114
|
+
|
|
110
115
|
def tables(schema = nil)
|
|
111
116
|
if schema
|
|
112
117
|
schema = quote(schema)
|
|
@@ -123,19 +128,39 @@ module Hypershield
|
|
|
123
128
|
SELECT
|
|
124
129
|
table_name,
|
|
125
130
|
column_name,
|
|
126
|
-
ordinal_position
|
|
127
|
-
data_type
|
|
131
|
+
ordinal_position
|
|
128
132
|
FROM
|
|
129
133
|
information_schema.columns
|
|
130
134
|
WHERE
|
|
131
|
-
table_schema =
|
|
135
|
+
table_schema = %{schema}
|
|
132
136
|
SQL
|
|
133
137
|
|
|
134
|
-
|
|
138
|
+
if materialized_views && postgresql?
|
|
139
|
+
query += <<~SQL
|
|
140
|
+
UNION ALL
|
|
141
|
+
SELECT
|
|
142
|
+
c.relname AS table_name,
|
|
143
|
+
a.attname AS column_name,
|
|
144
|
+
a.attnum AS ordinal_position
|
|
145
|
+
FROM
|
|
146
|
+
pg_attribute a
|
|
147
|
+
INNER JOIN
|
|
148
|
+
pg_class c ON a.attrelid = c.oid
|
|
149
|
+
INNER JOIN
|
|
150
|
+
pg_namespace n ON c.relnamespace = n.oid
|
|
151
|
+
WHERE
|
|
152
|
+
n.nspname = %{schema} AND
|
|
153
|
+
a.attnum > 0 AND
|
|
154
|
+
NOT a.attisdropped AND
|
|
155
|
+
c.relkind = 'm' AND
|
|
156
|
+
has_column_privilege(c.oid, a.attnum, 'SELECT')
|
|
157
|
+
SQL
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
select_all(query.squish % {schema: schema})
|
|
135
161
|
.map { |c| c.transform_keys(&:downcase) }
|
|
136
162
|
.group_by { |c| c["table_name"] }
|
|
137
|
-
.
|
|
138
|
-
.to_h
|
|
163
|
+
.to_h { |t, cs| [t, cs.sort_by { |c| c["ordinal_position"].to_i }.map { |c| c["column_name"] }] }
|
|
139
164
|
end
|
|
140
165
|
|
|
141
166
|
def select_all(sql)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hypershield
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
57
|
version: '0'
|
|
58
58
|
requirements: []
|
|
59
|
-
rubygems_version: 4.0.
|
|
59
|
+
rubygems_version: 4.0.10
|
|
60
60
|
specification_version: 4
|
|
61
61
|
summary: Shield sensitive data in Postgres and MySQL
|
|
62
62
|
test_files: []
|