2011-03-01 81 views
0

我创建了一个登录来连接到SQL SERVER。在sql express 2005中授予表级权限

create login bobLogin with password = 'bobpass' , default_database = bobDB 

但是当我连接sql server使用它,它不连接?因为它需要一个用户。

,所以我创建的用户:

create user bobDB_USER for login bobLogin 

然后我连接到SQL中使用bobLogin &服务器试图创建表:

create table bobDbTable(eid int) 

其给出许可被拒绝的错误;

,所以我授予的权限:

GRANT CREATE TABLE TO bobDB_USER 

然后我用bobLogin再次连接,&试图创建一个表,但它给了错误:

指定的架构名称“DBO”不存在或您无权使用它。

为什么这么说?它在dbo schema中创建表,这是为什么?那么我如何授予他这种权限?

我不想创建一个新的模式。有必要吗?

回答

1

您需要GRANT ALTER ON SCHEMA::dbo TO bobDB_USER才能在dbo架构中创建对象。

我也会使用角色。

create role bobDB_ROLE 
EXEC sp_addrolemember 'bobDB_ROLE', 'bobDB_USER' 
GRANT ALTER ON SCHEMA::dbo TO bobDB_ROLE 

但是,您可以添加到bobDB_USER如果db_owner它要求这些权利

EXEC sp_addrolemember 'db_owner', 'bobDB_USER' 

注:最终用户权限是管理类型的权限完全不同。如果'bobDB_USER'是最终用户,那么他们不应该创建对象

+0

@gbn,先生,我有一个问题:http://stackoverflow.com/questions/5151363/creating-multiple-users-for-ac -net-winform-application-using-sql-server-express – sqlchild 2011-03-01 06:55:12

+0

@gbn,先生,当我这样做:使用bobDB,创建登录bobLogin与密码='bobpass',default_database = bobDB,使用bobDB,创建用户bobDBUser登录bobLogin,然后是bobDBUser默认情况下不是bobDB的所有者,因为我在使用bobDB语句后创建了他,那么他是谁? – sqlchild 2011-03-01 06:58:14

+0

只是最终用户。服务器级所有者记录在sys.databases中。数据库级别的所有者必须被授予 – gbn 2011-03-01 07:02:22