2011-02-28 220 views
2

我创建一个登录:sp_addsrvrolemember 'dbcreator'在SQL Server中创建用户,登录名和授予权限

这会自动创建登录鲍勃下的用户&具有相同的:bob

我使用准许他创建数据库名称作为登录名。

Login - bob 
user- bob 

是在主数据库中创建用户?

我执行了此查询:select * from sysusers,但我找不到任何名为'bob'的用户。为什么这样?

'bob'有权限创建数据库。

现在我想授予他创建表的权限。所以我该怎么做? 当我正在使用授权,然后它说找不到用户'鲍勃'?为什么这样?

grant create table to bob 

之后,我连接与登录“鲍勃” SQL服务器然后,我创建一个数据库:bobdb 我进入bobdb。 现在,如何给bobdb创建表权限bobdb

我需要添加一个新用户吗?

回答

5

登录位于服务器级别 - 您在服务器上登录。

用户位于数据库级别 - 您可以为每个单独的数据库中的单次登录定义一个不同的用户。

该用户是在当你运行创建用户....声明说,当前活动的数据库中创建...

所以,如果你是在SSMS的master数据库时,你跑了查询 - 是的,则该用户在master数据库被成功创建,不存在其他任何地方......

2

连接到任何数据库作为自己......

CREATE LOGIN Bob WITH PASSWORD='<the password>'; 

,创建一个服务器级别的登录只有权限连接到任何数据库作为访客用户。现在添加登录服务器级别 dbcreator角色并连接到服务器作为鲍勃

发行创建数据库,您仍将只有一个登录名为鲍勃。那登录将拥有数据库,您可以通过运行此命令来验证数据库...

SELECT sp.name AS LoginName, dp.name AS UserName 
FROM bobdb.sys.database_principals AS dp 
     INNER JOIN sys.server_principals AS sp ON dp.sid = sp.sid 
WHERE sp.name = 'Bob' 
; 

因为鲍勃登录拥有数据库,他应该能够运行大多数DDL为该数据库命令。如果登录拥有数据库,则该登录可以在该数据库内执行任何操作,包括创建表。明确

授予权用户bobdb内鲍勃如果更改数据库所有者(ALTER AUTHORIZATION ON DATABASE :: bobdb TO LoginNameOfNewOwner)比鲍勃以外的帐户将是适当的。然后,Bob可以被添加为用户,该用户也被命名为Bob,然后仅授予该用户他需要的最小权限。

欲了解更多信息,请参阅db_owner in Books Online

还链接到页面的部分,之后SQL 2000,请参阅new system catalog views sysusers已过时。

最后,K. Brian Kelly在SSC网站上发布了login/user mapping的好摘要。

+0

先生我如何赋予鲍勃权利创建表? – sqlchild 2011-03-01 06:41:45

+0

,我的问题的一半仍然没有答案 – sqlchild 2011-03-01 06:42:12

+1

您的授权命令是正确的,但它不起作用的原因是因为Bob *登录*是数据库中的dbo *用户*。没有*数据库用户*名为bob和**创建用户Bob从LOGIN Bob **将收到一条错误消息(**消息15063,级别16,状态1,行1登录已经有一个帐户在不同的用户名下。**)现在在数据库中作为* user * dbo操作的Bob *登录*应该已经拥有创建表的权限。您只需要使用** CREATE USER **和**授予CREATE TABLE TO **给除Bob以外的数据库*用户*。 – 2011-03-02 10:41:35