Skip to content

Commit 6649118

Browse files
committed
fix: permission for net tables and remove secdef
1 parent 72bc757 commit 6649118

File tree

3 files changed

+85
-16
lines changed

3 files changed

+85
-16
lines changed

Diff for: sql/pg_net--0.11.0--0.11.1.sql

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
alter function net.http_get(text, jsonb, jsonb, integer) security invoker;
2+
3+
alter function net.http_post(text, jsonb, jsonb, jsonb, integer) security invoker;
4+
5+
alter function net.http_delete ( text, jsonb, jsonb, integer) security invoker;
6+
7+
alter function net._http_collect_response ( bigint, boolean) security invoker;
8+
9+
alter function net.http_collect_response ( bigint, boolean) security invoker;
10+
11+
grant usage on schema net to PUBLIC;
12+
grant all on all sequences in schema net to PUBLIC;
13+
grant all on all tables in schema net to PUBLIC;

Diff for: sql/pg_net.sql

+3-16
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ create or replace function net.http_get(
115115
volatile
116116
parallel safe
117117
language plpgsql
118-
security definer
119118
as $$
120119
declare
121120
request_id bigint;
@@ -159,7 +158,6 @@ create or replace function net.http_post(
159158
volatile
160159
parallel safe
161160
language plpgsql
162-
security definer
163161
as $$
164162
declare
165163
request_id bigint;
@@ -229,7 +227,6 @@ create or replace function net.http_delete(
229227
volatile
230228
parallel safe
231229
language plpgsql
232-
security definer
233230
as $$
234231
declare
235232
request_id bigint;
@@ -290,7 +287,6 @@ create or replace function net._http_collect_response(
290287
volatile
291288
parallel safe
292289
language plpgsql
293-
security definer
294290
as $$
295291
declare
296292
rec net._http_response;
@@ -345,22 +341,13 @@ create or replace function net.http_collect_response(
345341
volatile
346342
parallel safe
347343
language plpgsql
348-
security definer
349344
as $$
350345
begin
351346
raise notice 'The net.http_collect_response function is deprecated.';
352347
select net._http_collect_response(request_id, async);
353348
end;
354349
$$;
355350

356-
create or replace function net.worker_restart() returns bool as $$
357-
select pg_reload_conf();
358-
select pg_terminate_backend(pid)
359-
from pg_stat_activity
360-
where backend_type ilike '%pg_net%';
361-
$$
362-
security definer
363-
language sql;
364-
365-
grant all on schema net to postgres;
366-
grant all on all tables in schema net to postgres;
351+
grant usage on schema net to PUBLIC;
352+
grant all on all sequences in schema net to PUBLIC;
353+
grant all on all tables in schema net to PUBLIC;

Diff for: test/test_privileges.py

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import pytest
2+
from sqlalchemy import text
3+
4+
def test_net_on_postgres_role(sess):
5+
"""Check that the postgres role can use the net schema by default"""
6+
7+
role = sess.execute(text("select current_user;")).fetchone()
8+
9+
assert role[0] == "postgres"
10+
11+
# Create a request
12+
(request_id,) = sess.execute(text(
13+
"""
14+
select net.http_get(
15+
'http://localhost:8080/anything'
16+
);
17+
"""
18+
)).fetchone()
19+
20+
# Commit so background worker can start
21+
sess.commit()
22+
23+
# Confirm that the request was retrievable
24+
response = sess.execute(
25+
text(
26+
"""
27+
select * from net._http_collect_response(:request_id, async:=false);
28+
"""
29+
),
30+
{"request_id": request_id},
31+
).fetchone()
32+
assert response[0] == "SUCCESS"
33+
34+
def test_net_on_another_role(sess):
35+
"""Check that a newly created role can use the net schema"""
36+
37+
sess.execute(text("""
38+
create role another;
39+
"""))
40+
41+
# Create a request
42+
(request_id,) = sess.execute(text(
43+
"""
44+
set local role to another;
45+
select net.http_get(
46+
'http://localhost:8080/anything'
47+
);
48+
"""
49+
)).fetchone()
50+
51+
# Commit so background worker can start
52+
sess.commit()
53+
54+
# Confirm that the request was retrievable
55+
response = sess.execute(
56+
text(
57+
"""
58+
set local role to another;
59+
select * from net._http_collect_response(:request_id, async:=false);
60+
"""
61+
),
62+
{"request_id": request_id},
63+
).fetchone()
64+
assert response[0] == "SUCCESS"
65+
66+
sess.execute(text("""
67+
set local role postgres;
68+
drop role another;
69+
"""))

0 commit comments

Comments
 (0)