我正在使用SQL Server开发一个C#应用程序,并希望调用存储过程来创建登录和用户。
我正在寻找最简单的方法,只是默认的东西,但有用户名和密码。
登录旁边的创建带有红色下划线?
但我觉得我的登录很好吗?请告诉我,如果我遗失了什么。
使用创建用户,它只是一个像这样的单线程吗?
CREATE PROCEDURE CreateLoginAndUser
@UserName
CREATE LOGIN @UserName
WITH PASSWORD = 'password',
DEFAULT_DATABASE = [TestAudit],
DEFAULT_LANGUAGE = [British],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=ON;
CREATE USER 'DEV' + @UserName
[{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]
我不理解FOR
和FROM
...
我可以这样做:
CREATE PROCEDURE CreateLoginAndUser
@UserName
CREATE LOGIN @UserName
WITH PASSWORD = 'password',
DEFAULT_SCHEMA = schema
CREATE USER 'DEV'+@UserName
[{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]
如何使用Google搜索以下来源:
答案 0 :(得分:3)
考虑使用动态SQL来创建用户。例如,使用名为@login
的数据库用户创建名为'DEV' + @login
的服务器登录名:
create procedure dbo.CreateLoginAndUser(
@login varchar(100),
@password varchar(100),
@db varchar(100))
as
declare @safe_login varchar(200)
declare @safe_password varchar(200)
declare @safe_db varchar(200)
set @safe_login = replace(@login,'''', '''''')
set @safe_password = replace(@password,'''', '''''')
set @safe_db = replace(@db,'''', '''''')
declare @sql nvarchar(max)
set @sql = 'use ' + @safe_db + ';' +
'create login ' + @safe_login +
' with password = ''' + @safe_password + '''; ' +
'create user DEV' + @safe_login + ' from login ' + @safe_login + ';'
exec (@sql)
go
构造客户端的SQL语句可能更容易。但即便如此,您也无法在create login
语句中使用参数。所以要警惕SQL注入。
答案 1 :(得分:1)
{FOR | FROM}表示你可以使用或来自。
| (竖线)=用括号或大括号括起来的语法项。您只能使用其中一项。
编辑:
我应该补充一点,他们是同义词,你可以使用其中的任何一个,结果是相同的
答案 2 :(得分:0)
您应该考虑用户权限。要创建SQL Server登录和数据库用户,您必须具有SQL Server实例的高权限。因此,您必须授予用户执行操作的权限(以及意味着服务器级别和数据库控制权限),或者您必须使用其他机制来不使您的服务器易受攻击。
其中一个选项是使用证书和signet存储过程来“很好地”执行操作,而不允许直接创建登录/用户。
此外,能够使用跟踪的人将能够看到密码(如果您没有在程序中包装密码,则密码不会显示在跟踪中)。
答案 3 :(得分:0)
这是一个关于如何为服务器范围创建登录名以及db的用户的示例 使其适应程序
USE [master]
GO
CREATE LOGIN [usr] WITH PASSWORD=N'pass', DEFAULT_DATABASE=[yourDb], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [yourDb]
GO
CREATE USER [usr] FOR LOGIN ['usr]
GO
你只需要接收usr和密码作为参数并使用它