编辑:

编辑:

我创建了一个带有 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;

相关内容