我创建了一个带有 SQL Server Express Edition 的 RDS 实例。实例设置一切正常,我也成功连接到它。
但是一旦使用主用户连接,我就无法在服务器上创建任何数据库、模式或表。它一直说用户没有执行该操作的权限。
我可能遗漏了什么?主用户不应该默认拥有所有权限吗?如果没有,我该怎么做?
谢谢你的帮助!
编辑:
这就是我想运行的:
CREATE TABLE [dbo].[wt_category] (
[sys_id] bigint NOT NULL IDENTITY(1,1) ,
[sys_timestamp] timestamp NOT NULL ,
[country] varchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[days] date NOT NULL ,
[pages] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL DEFAULT NULL ,
[visits] int NULL DEFAULT NULL ,
[page_impressions] int NULL DEFAULT NULL ,
[visits_w_product] int NULL DEFAULT NULL ,
[products] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
PRIMARY KEY ([sys_id])
)
我收到此错误:
[错误] 42000 - [SQL Server]数据库“rdsadmin”中拒绝创建表权限。
答案1
错误消息表明您的用户没有权限在数据库“rdsadmin”中创建新表。
检查“rdsadmin”数据库是否存在,并且对于您尝试以该身份执行命令的用户是否具有正确的权限。
故障排除:
对于 SQL Server 您可能需要类似这样的内容:
将当前管理员用户添加到 SQL Server Express 2008
CREATE LOGIN [domain\username] FROM WINDOWS;
GO
EXEC sp_addsrvrolemember 'domain\username', 'sysadmin';
GO
对于 MySQL:
- rdsadmin 是使用 RDS 创建的管理员用户,具有所有全局权限(仅在本地主机上)。这仅供 AWS/RDS 使用,您无法使用。
- 当我在 RDS 设置向导中创建 db/user 时,我的用户“test”被创建,它具有大多数全局权限(在 % 上)。
这些账户均未在任何数据库上被授予任何特定权限。您应该根据需要明确授予权限。
我通常会通过登录(在终端或使用 Sequel Pro 等 GUI)并执行所需的权限来执行此操作。在此示例中,我将使用“测试”用户登录 mysql。
登录后,您可以运行所需的 MySQL 命令:
http://kb.mediatemple.net/questions/788/HOWTO%3A+GRANT+privileges+in+MySQL#dv 或者http://library.linode.com/databases/mysql/arch-linux有这样的例子,但这里有一个简单的例子:
CREATE DATABASE testdb;
CREATE USER 'testuser'@localhost IDENTIFIED BY 'CHANGEME';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@localhost;
当然,您必须用正确的数据库/用户名/密码替换(如果数据库或用户已经存在,则可以跳过数据库/用户创建命令)。
您可能只想在本地主机上授予权限,或者根据您想要实现的目标授予其他权限。
答案2
在 Amazon RDS SQL Server 实例上,'rds管理员' 数据库由 Amazon RDS 使用雷达光谱仪用户进行实例管理。它将作为新 RDS 实例上的唯一非系统数据库出现。虽然主用户有权在服务器上执行大多数操作,但您将无法修改此数据库,实际上也不需要这样做。有关 RDS 主用户限制的更多信息,请参见此处:Amazon RDS 上的 SQL Server
为了创建表,您首先需要为您的数据创建一个新的数据库,然后您可以在该新数据库中创建表。
以下脚本给出了创建数据库、创建表、插入、选择然后删除表和数据库的示例。使用启动 RDS 时创建的“主”帐户登录,您应该具有运行此脚本的权限,不会出现任何问题。
USE master;
CREATE DATABASE NewDB;
GO
USE NewDB;
CREATE TABLE NewTable (Msg TEXT);
INSERT INTO NewTable (Msg) VALUES ('THIS SHOULD WORK');
SELECT * FROM NewTable;
DROP TABLE NewTable;
USE master;
DROP DATABASE NewDB;