在sql server中创建用户,登录和授予权限

时间:2011-02-28 08:58:47

标签: c# sql sql-server sql-server-2005 tsql

我创建了一个登录名:bob

我授予他使用sp_addsrvrolemember 'dbcreator'

创建数据库的权限

这会自动在登录bob下创建一个用户,&与登录名同名。

Login - bob
user- bob

是否在master数据库中创建了用户?

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

'bob'有权创建数据库。

现在我想授予他创建表的权限。那我该怎么做? 当我使用grant进行它时,它说无法找到用户'bob'?为什么这样?

grant create table to bob

之后,我连接sql server并登录'bob' 然后,我创建了一个数据库:bobdb 我进入了bobdb。 现在,如何在bobdb中为bob赋予create table权限

我是否需要添加新用户?

2 个答案:

答案 0 :(得分:5)

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

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

在运行create user .... statement ...

时,在当前处于活动状态的数据库中创建用户

因此,如果您在运行该查询时位于SSMS中的master数据库中 - 是的,那么该用户是在master数据库中创建的,并且在其他任何地方都不存在......

答案 1 :(得分:2)

以您自己的身份连接到任何数据库...

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

这会创建一个服务器级登录,它只有作为访客用户连接到任何数据库的权限。现在将登录添加到服务器级 dbcreator角色,并以 Bob 身份连接到服务器。

问题CREATE DATABASE,你仍然只有名为 Bob 登录登录将拥有数据库,您可以通过运行此命令来验证...

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'
;

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

明确向用户授予权限bobdb中的Bob适用于更改数据库所有者( ALTER AUTHORIZATION ON DATABASE :: bobdb TO LoginNameOfNewOwner )以外的帐户。然后可以将Bob添加为名为Bob的用户,然后仅授予该用户所需的最低权限。

有关详细信息,请参阅 db_owner in Books Online

上与页面相关的部分

此外,在SQL 2000之后不推荐使用sysusers。请参阅 new system catalog views

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