81 lines
2.2 KiB
Transact-SQL
81 lines
2.2 KiB
Transact-SQL
-- MS SQL Server User Setup for Weather Connect
|
|
-- Run this as a user with appropriate privileges (e.g., sa or sysadmin role)
|
|
-- This creates a SQL Server login and database user
|
|
|
|
USE master;
|
|
GO
|
|
|
|
-- 1. Create SQL Server Login (if it doesn't exist)
|
|
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'weather_user')
|
|
BEGIN
|
|
CREATE LOGIN weather_user WITH PASSWORD = 'Weather123!';
|
|
PRINT 'Login weather_user created successfully.';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
PRINT 'Login weather_user already exists.';
|
|
END
|
|
GO
|
|
|
|
-- 2. Switch to the WeatherDB database
|
|
USE WeatherDB;
|
|
GO
|
|
|
|
-- 3. Create database user for the login (if it doesn't exist)
|
|
IF NOT EXISTS (SELECT name FROM sys.database_principals WHERE name = 'weather_user')
|
|
BEGIN
|
|
CREATE USER weather_user FOR LOGIN weather_user;
|
|
PRINT 'User weather_user created successfully in WeatherDB.';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
PRINT 'User weather_user already exists in WeatherDB.';
|
|
END
|
|
GO
|
|
|
|
-- 4. Grant necessary permissions to the user
|
|
-- Grant db_datareader and db_datawriter roles
|
|
ALTER ROLE db_datareader ADD MEMBER weather_user;
|
|
ALTER ROLE db_datawriter ADD MEMBER weather_user;
|
|
GO
|
|
|
|
-- Grant DDL permissions to create tables and indexes
|
|
GRANT CREATE TABLE TO weather_user;
|
|
GRANT CREATE VIEW TO weather_user;
|
|
GRANT ALTER ON SCHEMA::dbo TO weather_user;
|
|
GO
|
|
|
|
-- 5. Verify user and permissions
|
|
SELECT
|
|
dp.name AS UserName,
|
|
dp.type_desc AS UserType,
|
|
sp.name AS LoginName
|
|
FROM sys.database_principals dp
|
|
LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid
|
|
WHERE dp.name = 'weather_user';
|
|
GO
|
|
|
|
-- Display granted permissions
|
|
SELECT
|
|
USER_NAME(grantee_principal_id) AS UserName,
|
|
permission_name,
|
|
state_desc
|
|
FROM sys.database_permissions
|
|
WHERE USER_NAME(grantee_principal_id) = 'weather_user'
|
|
AND permission_name IN ('CREATE TABLE', 'CREATE VIEW', 'ALTER')
|
|
ORDER BY permission_name;
|
|
GO
|
|
|
|
-- Display role memberships
|
|
SELECT
|
|
USER_NAME(drm.member_principal_id) AS UserName,
|
|
USER_NAME(drm.role_principal_id) AS RoleName
|
|
FROM sys.database_role_members drm
|
|
WHERE USER_NAME(drm.member_principal_id) = 'weather_user';
|
|
GO
|
|
|
|
PRINT 'User weather_user is ready to use.';
|
|
PRINT 'Connection string example:';
|
|
PRINT 'Server=your_server;Database=WeatherDB;User Id=weather_user;Password=Weather123!;';
|
|
GO
|