如何在SQL Server 2005中,新建一个数据库和用户.并给予相应的权限.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server 2005中,新建一个数据库和用户.并给予相应的权限.相关的知识,希望对你有一定的参考价值。

第一次用SQL Server 2005 在2003SP2系统.
请问如何新建立一个数据库并创建一个登陆的用户账号密码.
作用是建立一个mssql网站. 给予相应的权限.重点在于权限如何分配?
我的安装提示:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
':' 附近有语法错误。
/install/install.asp,行 1631

downplus的安装程序...

我以前没接触过,所以请回答仔细点,sql 2000的答案就不要搬过来了.

选择“混合模式身份验证”时,请输入并确认系统管理员 (sa) 登录名。密码是抵御入侵者的第一道防线,因此设置强密码对于系统安全是绝对必要的。绝对不要设置空的或弱的 sa 密码。

注意:
SQL Server 密码可包含 1 到 128 个字符,包括字母、符号和数字的任意组合。如果选择“混合模式身份验证”,则必须输入强 sa 密码才能进入安装向导的下一页。

强密码指南
强密码不易被人猜出,也不易用计算机程序攻击。强密码不能使用禁止的条件或字词,包括:

空条件或 NULL 条件

"Password"

“Admin”

“Administrator”

“sa”

“sysadmin”

强密码不能是下列与安装的计算机有关联的词:

当前登录到计算机上的用户的名称。

计算机名称。

强密码长度必须至少是 6 个字符,并且至少要满足下列四个条件中的三个:

必须包含大写字母。

必须包含小写字母。

必须包含数字。

必须包含非字母数字字符;例如,#、% 或 ^。

在“身份验证模式”页中输入的密码必须满足强密码策略要求。如果有使用 SQL 身份验证的自动化设置,请确保密码满足强密码策略要求。
参考技术A MS的东西不是都有图形界面和操作向导吗?!为什么不用,而使用命令呢?!

如何强制 SQL Server 2005 在 where 之前运行连接?

【中文标题】如何强制 SQL Server 2005 在 where 之前运行连接?【英文标题】:How do I force SQL Server 2005 to run a join before the where? 【发布时间】:2010-12-11 06:34:37 【问题描述】:

我有一个 SQL 查询,它将定价表连接到包含用户提供的答案的表。我的查询用于根据输入的数量获取价格。下面是我的 SQL 语句:

SELECT JobQuestion.Value, Price.Min, Price.Max, Price.Amount FROM Price
    INNER JOIN JobQuestion 
        ON Price.QuestionFK=JobQuestion.QuestionFK
        AND JobQuestion.JobFK=1
WHERE Price.Min <= JobQuestion.Value 
    AND Price.Max >= JobQuestion.Value

问题是 SQL Server 在 JOIN 之前运行 where 子句并抛出错误:

转换时转换失败 varchar 值 'TEST' 到数据类型 int。

因为它在连接之前进行了最小和最大比较('TEST' 是 JobQuestion 表中用户输入的有效值,但不应在 JobQuestion 连接到 Price 时返回)。我相信 SQL Server 选择运行 WHERE 是因为由于某种原因解析器认为这将是一个更有效的查询。如果我只是跑

SELECT JobQuestion.Value, Price.Min, Price.Max, Price.Amount FROM Price
    INNER JOIN JobQuestion 
        ON Price.QuestionFK=JobQuestion.QuestionFK
        AND JobQuestion.JobFK=1

我得到了这些结果:

500 1       500     272.00
500 501     1000    442.00
500 1001    2000    782.00

所以,添加 WHERE 应该过滤掉最后两条,只返回第一条记录。如何强制 SQL 先运行 JOIN 或使用其他技术过滤掉我需要的记录?

【问题讨论】:

【参考方案1】:

尝试按如下方式“重新措辞”查询:

SELECT *
FROM   (
          SELECT JobQuestion.Value, 
                 Price.Min, 
                 Price.Max, 
                 Price.Amount 
          FROM   Price
          INNER 
          JOIN   JobQuestion 
                 ON Price.QuestionFK = JobQuestion.QuestionFK
                 AND JobQuestion.JobFK = 1
       ) SQ
WHERE  SQ.Min <= SQ.Value 
AND    SQ.Max >= SQ.Value

根据 Christian Hayter 的回答,如果您有选择,请更改桌子设计 =)

【讨论】:

这里需要将 JobQuestion.Value 转换为 int(一些数字)吗? 我没有尝试过,但有趣的是它会产生相同的错误。同样,SQL Server Optimizer 必须将其转换为与原始执行路径相同的执行路径 如果它“尴尬”,那么您可以考虑尝试将内部部分(SQ)转换为视图,或创建存储过程,将“SQ”的结果存储在临时表,然后在该表上执行 WHERE 子句..【参考方案2】:

您不应该将字符串与整数进行比较。如果您对表格设计有任何影响,请将JobQuestion.Value 列的两种不同用途分成两个不同的列。

【讨论】:

我确实可以控制表格设计,但是 JobQuestion 表格被设计成一个愚蠢的表格,它包含动态创建的问题的值。将来我会考虑到这一点,当我必须询问问题答案时,它只会增加几层复杂性,因为我必须查看 varchar 和 int 字段。 您能否解释一下您为什么要尝试将问题与价格进行比较?这对我来说没有意义。 我将问题的答案与价格表的最小值和最大值列进行比较,以确定选择哪个价格水平。因此,如果他们的用户选择了 500 的数量(存储在 JobQuestion 表中),我在 Price 表中查找具有 = 500 的最大值的价格记录,这给出了我的价格水平。 您可以尝试一些技巧,例如CTE 或表值 UDF。最终,这取决于您的餐桌设计。【参考方案3】:

首先,这很可能是设计不佳的标志。 如果您无法更改架构,那么也许您可以使用hints 强制执行此行为。引用:

提示是 SQL Server 查询处理器在 SELECT、INSERT、UPDATE 或 DELETE 语句上为强制执行而指定的选项或策略。提示会覆盖查询优化器可能为查询选择的任何执行计划。

还有更多:

注意: 由于 SQL Server 查询优化器通常会为查询选择最佳执行计划,因此我们建议只有经验丰富的开发人员和数据库管理员在不得已的情况下才使用

【讨论】:

我不喜欢使用 SQL 提示的想法,但它似乎是(使用当前模式)处理查询而不会出错的唯一方法。我尝试使用“OPTION (FORCE ORDER)”提示并且有效!【参考方案4】:

如果您对表格设计没有影响 - 您可以尝试使用 ISNUMERIC() 过滤掉那些具有数值的记录吗?我猜想将此添加到您的 where 子句中可能会有所帮助。

【讨论】:

我试过 ISNUMERIC,但有人输入的数值会溢出 int 并且会抛出错误 @Austin:你评论中的“它”是什么? IsNumeric 会假设它是一个不同的数据类型并且仍然返回 true。 对不起,“它”指的是 SQL Server。当我尝试使用 ISNUMERIC 时,SQL Server 过滤掉了所有非数字值,但是当它比较 Price.Min 好的,我不认为你使用的数字很大。但在这种情况下,您仍然可以使用 is_numeric 过滤掉字符串,然后将整数列转换为小数。当然这并不理想,但它可能比使用提示阻塞优化器要快得多。【参考方案5】:

您可能会删除 where... 并将它们作为谓词添加到您的联接中。因为它是一个内部连接,所以应该可以工作

SELECT JobQuestion.Value, Price.Min, Price.Max, Price.Amount 
FROM Price    
INNER JOIN JobQuestion
ON Price.QuestionFK=JobQuestion.QuestionFK       
AND JobQuestion.JobFK=1
AND Price.Min <= JobQuestion.Value
AND Price.Max >= JobQuestion.Value

【讨论】:

结果相同,因为 SQL Server 优化器以相同的顺序运行它们。 hmm ands 没有按顺序测试?似乎不太可能。 我同意,但这就是返回的内容。 也许尝试在价格检查之前将 fk=1 移动到 where 子句。这必须有效,否则它会违反所有逻辑,我的脑袋会爆炸。 不,还是没用。我认为问题在于 SQL Server 优化器可以做任何想做的事情来创建最有效的查询,在我的情况下,当它进行比较时会炸毁查询【参考方案6】:

您可以在字符串列上使用 TRY_PARSE 将其转换为数字,如果 SQL 无法转换,它将为您返回 NULL 而不是错误消息。

附:这个东西是 SQL 2012 中第一次引入,所以可能会有所帮助。

【讨论】:

以上是关于如何在SQL Server 2005中,新建一个数据库和用户.并给予相应的权限.的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2005新建登录名失败,错误码15247.

如何彻底删除sql server已安装实例

sql server2005新创建的登录名无法登陆

如何在 SQL Server 2005 中回滚 UPDATE 查询?

sql server 2005中如何修改字段名

如何在SQL Server 2005中回滚UPDATE查询?