Sunday, May 31, 2026

SQL 2025 master class LAB ownership

use MASTER

IF EXISTS (SELECT * FROM sys.databases WHERE NAME = 'testDB')

DROP DATABASE testDB;

GO

IF EXISTS (SELECT * FROM SYSLOGINS WHERE NAME = 'testlogin1')

DROP LOGIN TestLogin1;

GO

CREATE DATABASE testDB;

GO

USE testDB

GO

CREATE SCHEMA TestSchema1;

GO

CREATE TABLE TestSchema1.TestTable (id INT, col1 INT);

INSERT INTO TestSchema1.TestTable  VALUES(42, 1);

 

 

--step 2

CREATE LOGIN TestLogin1 WITH PASSWORD='sqlpassword', CHECK_POLICY = OFF;

CREATE USER TestUser1 FOR LOGIN TestLogin1;

GRANT SELECT ON SCHEMA::TestSchema1 TO TestUser1;

 

DROP PROC StoredProcThatWrites;

GO

CREATE PROC StoredProcThatWrites

AS

BEGIN

UPDATE TestSchema1.TestTable

SET col1 = '2' WHERE id > 0;

END;

GO

 

--step 3

GRANT EXEC ON StoredProcThatWrites TO testuser1;

GO

EXECUTE AS USER = 'testuser1';

GO

 

EXEC StoredProcThatWrites;

GO

 

UPDATE TestSchema1.TestTable

SET col1 = '2' WHERE id > 0;

GO

 

REVERT;

GO

 

SELECT p.name, p.principal_id, s.name, USER_NAME(p.principal_id)

FROM sys.procedures AS p

  JOIN sys.schemas AS s

    ON p.schema_id = S.schema_id

WHERE p.name = 'StoredProcThatWrites';

GO

 

SELECT name, principal_id, USER_NAME(principal_id)

FROM sys.schemas

WHERE name = 'TestSchema1';

 

 

SELECT name, principal_id, USER_NAME(principal_id)

FROM sys.schemas

WHERE name = 'dbo';

EXECUTE AS USER = 'testuser1';

GO

 

EXEC StoredProcThatWrites;

GO

 

UPDATE TestSchema1.TestTable

SET col1 = '2' WHERE id > 0;

GO

 

REVERT;

GO