Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix is_srvrolemember output for login same as specified server role #3293

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2190,6 +2190,9 @@ BEGIN

ELSIF role = 'public' COLLATE sys.database_default THEN
RETURN 1;

ELSEIF role = login THEN
RETURN 0;

ELSIF role COLLATE sys.database_default IN ('sysadmin', 'securityadmin', 'dbcreator') THEN
has_role = (pg_has_role(login::TEXT, role::TEXT, 'MEMBER')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ FROM pg_catalog.pg_roles AS Base INNER JOIN sys.babelfish_authid_login_ext AS Ex
WHERE Ext.type = 'R'
AND bbf_is_member_of_role_nosuper(sys.suser_id(), Base.oid);
GRANT SELECT ON sys.login_token TO PUBLIC;

CREATE OR REPLACE FUNCTION is_srvrolemember(role sys.SYSNAME, login sys.SYSNAME DEFAULT suser_name())
RETURNS INTEGER AS
$$
Expand All @@ -402,6 +403,9 @@ BEGIN

ELSIF role = 'public' COLLATE sys.database_default THEN
RETURN 1;

ELSEIF role = login THEN
RETURN 0;

ELSIF role COLLATE sys.database_default IN ('sysadmin', 'securityadmin', 'dbcreator') THEN
has_role = (pg_has_role(login::TEXT, role::TEXT, 'MEMBER')
Expand Down
25 changes: 25 additions & 0 deletions test/JDBC/expected/dbcreator_role-vu-verify.out
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,31 @@ int
~~END~~


select is_srvrolemember('dbcreator','dbcreator')
go
~~START~~
int
0
~~END~~


select is_srvrolemember('sysadmin','sysadmin')
go
~~START~~
int
0
~~END~~


-- should return NULL for invalid login
select is_srvrolemember('l1', 'l1')
go
~~START~~
int
<NULL>
~~END~~


alter login dbcreator_login1 with password='123'
go

Expand Down
8 changes: 8 additions & 0 deletions test/JDBC/expected/securityadmin_role-vu-verify.out
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ int
~~END~~


select is_srvrolemember('securityadmin','securityadmin')
go
~~START~~
int
0
~~END~~


alter login securityadmin_login1 with password='123'
go

Expand Down
25 changes: 25 additions & 0 deletions test/JDBC/expected/single_db/dbcreator_role-vu-verify.out
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,31 @@ int
~~END~~


select is_srvrolemember('dbcreator','dbcreator')
go
~~START~~
int
0
~~END~~


select is_srvrolemember('sysadmin','sysadmin')
go
~~START~~
int
0
~~END~~


-- should return NULL for invalid login
select is_srvrolemember('l1', 'l1')
go
~~START~~
int
<NULL>
~~END~~


alter login dbcreator_login1 with password='123'
go

Expand Down
10 changes: 10 additions & 0 deletions test/JDBC/input/dbcreator_role-vu-verify.mix
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ go
select is_srvrolemember('dbcreator', 'securityadmin')
go

select is_srvrolemember('dbcreator','dbcreator')
go

select is_srvrolemember('sysadmin','sysadmin')
go

-- should return NULL for invalid login
select is_srvrolemember('l1', 'l1')
go

alter login dbcreator_login1 with password='123'
go

Expand Down
3 changes: 3 additions & 0 deletions test/JDBC/input/securityadmin_role-vu-verify.mix
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ go
select is_srvrolemember('securityadmin', 'sysadmin')
go

select is_srvrolemember('securityadmin','securityadmin')
go

alter login securityadmin_login1 with password='123'
go

Expand Down
Loading